Encoding.Default如何在.NET中运行?

时间:2011-05-15 04:11:40

标签: c# file file-io encoding io

我正在使用以下方式阅读文件:

var source = File.ReadAllText(path);

并且未正确加载角色©

然后,我将其改为:

var source = File.ReadAllText(path, Encoding.UTF8);

什么都没有。

我决定尝试使用

var source = File.ReadAllText(path, Encoding.Default);

它完美无缺。 然后我调试了它,并试图找到哪个编码完成了这个技巧,我发现它是UTF-7

我想知道的是:

是否建议使用Encoding.Default,是否可以保证文件的所有字符都可以正常读取?

4 个答案:

答案 0 :(得分:8)

Encoding.Default只能保证所有UTF-7字符集都能正确读取(google用于整套)。另一方面,如果您尝试在UTF-8模式下读取未使用UTF-8编码的文件,则会像您一样获得损坏的字符。

例如,如果文件是UTF-16编码,如果你以UTF-16模式读取它,即使文件不包含单个UTF-16特定字符,你也可以。这一切归结为文件的编码。

你需要进行保存 - 使用相同的编码重新打开内容以免受损坏。否则,尝试尽可能多地使用UTF-7,因为它是最紧凑的“电子邮件安全”编码,这就是为什么它在大多数.NET框架设置中都是默认的。

答案 1 :(得分:8)

不建议使用Encoding.Default。

来自MSDN:

  

不同的计算机可以使用不同的   编码作为默认值,而且   默认编码甚至可以更改   单台电脑。因此,数据   从一台计算机流到另一台计算机   甚至在不同的时间检索   在同一台计算机上可能是   翻译不正确。此外,   Default返回的编码   属性使用最合适的后备映射   不支持的字符到字符   代码页支持。对于这些   有两个原因,使用默认值   通常不建议使用编码。   确保编码的字节是   正确解码,你的应用程序   应该使用Unicode编码,例如   UTF8Encoding或UnicodeEncoding,带   序言。另一个选择是使用a   更高级别的协议,以确保   相同的格式用于编码   和解码。

答案 2 :(得分:4)

听起来您有兴趣自动检测文件的编码,在某种情况下,您无法控制用于保存文件的编码。 StackOverflow解决了这个问题;一些粗略的浏览指向Determine a string's encoding in C#作为一个非常好的浏览点。我最喜欢的答案是the one pointing to a C# port of Mozilla's universal charset detector

答案 3 :(得分:-2)

我认为你的文件是utf-7编码。没有更多。 访问此页面Your Answer