C# System.IO.Directory.CreateDirectory - 使用 utf-8 字符创建目录?

标签 c# utf-8

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

bohou�_120328 而不是bohouš_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);
                                } 

如果我在我的 Windows 7 64 位计算机上运行我的应用程序,一切都很好。但是,如果我在其他装有 WinXP 等较旧系统的计算机上运行,​​编码就是错误的,看起来像这样

bohou�_120328

在使用变量创建文件夹之前,我写了 i 输出,但一切都很好。甚至文件夹名称都可以。但不幸的是,只在我的电脑上。

edit2:

事情变得更奇怪了。我使用了这段代码 How do I remove diacritics (accents) from a string in .NET?删除变音符号,因为没有变音符号的名字对我来说很好。

然而,再次:

  1. 在我的电脑上运行代码会生成 bohous_120328
  2. 在其他电脑上运行代码,我的闪存盘进入bohou�_120328

我发誓这是相同的代码,因为我复制了我的 .exe 文件。

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

很乐意解释:-)

最佳答案

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

关于C# System.IO.Directory.CreateDirectory - 使用 utf-8 字符创建目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10415558/

相关文章:

c# - Azure Cosmos Document DB - 按 id 读取多个文档

c# - IEnumerable<string> => 独特的字符串[]

c# - AutoMapper.Mapper.Map 偶尔返回具有空属性的对象

mysql - 使用ASP和MySQL设置字符集

ruby-on-rails - 有没有办法在 Ruby 中清除 "invalid byte sequence in UTF-8"错误的文件?

javascript - Node.js 中的 utf8 重音符号

javascript - 部署时为 "That assembly does not allow partially trusted callers"

c# - MVC 3-这将如何运作?

objective-c - 我仍然遇到 NSXMLParser 的 UTF-8 编码问题

c# - .net 中的转换 : Native Utf-8 <-> Managed String