C#System.IO.Directory.CreateDirectory-创建具有utf-8字符的目录?

C#System.IO.Directory.CreateDirectory-创建具有utf-8字符的目录?,c#,utf-8,C#,Utf 8,我从utf-8编码文件中读取数据。然后,此文件的部分内容将用作新创建文件夹的名称。但是,我的文件夹名为: 博侯�_120328而不是bohoušu 120328 如何为新创建的文件夹名称设置正确的编码?谢谢 编辑: 我通过以下方式从文件中读取信息: System.IO.StreamReader file = new System.IO.StreamReader(nameOfFile); while ((j = file.ReadLine()) != null) { //manipu

我从utf-8编码文件中读取数据。然后,此文件的部分内容将用作新创建文件夹的名称。但是,我的文件夹名为:

博侯�_120328而不是bohoušu 120328

如何为新创建的文件夹名称设置正确的编码?谢谢

编辑:

我通过以下方式从文件中读取信息:

System.IO.StreamReader file = new System.IO.StreamReader(nameOfFile);

 while ((j = file.ReadLine()) != null) { 
    //manipulating string in j
 }
然后使用

if (Directory.Exists(folder) == false) {
                                    Console.WriteLine("creating directory " + folder);
                                    System.IO.Directory.CreateDirectory(@folder);
                                } 
如果我在Windows7 64位计算机上运行我的应用程序,一切正常。然而,如果我在其他使用旧系统(如WinXP)的计算机上运行,编码就是错误的,看起来是这样的

bohou�_120328
在使用变量创建文件夹之前,我将I写入输出,但一切正常。甚至文件夹名称也可以。但不幸的是,就在我的电脑上

edit2

事情变得更奇怪了。我用这段代码删除了变音符号,因为没有变音符号的名字对我来说很好

然而,同样:

  • 在我的计算机上运行代码会生成bohous_120328
  • 在其他计算机和我的闪存盘上运行代码会让我进入博后�_120328
  • 我发誓这是相同的代码,因为我复制了我的.exe文件

    调试器说,在创建文件夹之前,问题已经出现在我的字符串变量中。我不明白,在这种情况下,环境是如何影响我的变量的


    我很乐意解释:-)

    我想你看错文件了。您应该首先检查读取的文本。

    在Windows上,您不指定文件名或目录名的编码。在NTFS上,它们总是使用本质上是UTF-16的编码。只要正确读入字符串,CreateDirectory将执行您想要的操作。我怀疑您没有将UTF-8文件读为UTF-8,或者您的文件实际上不是UTF-8。在调用CreateDirectory之前,先查看一下调试器中的字符串值。

    我怀疑这与代码如何读取文本或如何将其写入目录名无关。我敢打赌,这是对创建目录的操作系统或分区类型的限制。我的猜测可能是操作系统/分区无法处理带变音符号的字符,或者它被正确写入,结果显示不正确

    本文提供了一些关于如何扩展文件系统以允许使用变音字符的信息(无论如何,对于NTFS):


    其他分区类型可能有类似的信息(您仍然没有回答SixlettVariables询问您使用的分区类型的注释)。

    StreamReader的默认编码为UTF-8。 如果您的文件不是UTF-8编码的,您将永远无法确保在本地化版本的操作系统上获得正确的字符

    我的意思是:

    • 文件内容为UTF-8&
      新StreamReader(路径)
      :编码匹配:否 问题

    • 文件内容为UTF-8&
      新StreamReader(路径,编码。默认值)
      :部分匹配,只有与当前操作系统代码页对应的字符才能正确解码

    • 文件内容为(Windows上的默认值)&
      新的StreamReader(路径)
      :编码 不匹配,仅解码AFAIK字符

    • 文件内容为ANSI&
      新的StreamReader(路径,Encoding.Default)
      : 部分匹配,仅与当前OS代码页对应的字符 将被正确解码

    检查文件编码和操作系统默认代码页可能有助于找到问题。

    StreamReader编码,默认情况下不使用UTF8

    我建议在构造函数中提供Encoding.UTF8。

    如果这没有帮助,我猜您的文件内容不是真正的UTF8,您依赖于计算机的区域设置。

    Directory.CreateDirectory(@“Bohouš”);Console.WriteLine({0}),Directory.Exists(@“Bohouš”)
    outputs
    True
    @Nick我刚刚添加了代码。@SixlettVariables您是对的,这也适用于我的计算机,但不适用于其他计算机您在XP计算机上写入的分区类型是什么?FAT32?NTFS?在XP机器上有NTFS,我正在写到桌面上的文件夹(C:)你们是对的。在某些计算机上,它正确读取文件,在某些计算机上则不正确。这是阅读问题。