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

我正在使用以下方法读取文件:

var source = File.ReadAllText(path); 

并且字符©未正确加载。

然后,我将其更改为:

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

没别的了。

我决定尝试使用

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

它工作得很好。 然后我调试它,并试图找到哪个编码做了伎俩,我发现它是UTF-7

我想知道的是:

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

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

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

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

建议不要使用Encoding.Default。

从MSDN引用:

不同的计算机可以使用不同的编码作为默认编码,默认编码甚至可以在一台计算机上更改。 因此,从一台计算机流式传输到另一台计算机甚至在同一台计算机上不同时间检索的数据可能会被错误地翻译。 此外,Default属性返回的编码使用最适合的回退将不受支持的字符映射到代码页支持的字符。 出于这两个原因,通常不建议使用默认编码。 为了确保正确解码编码的字节,您的应用程序应使用Unicode编码,例如UTF8Encoding或UnicodeEncoding,以及前导码。 另一种选择是使用更高级别的协议来确保使用相同的格式进行编码和解码。

听起来您有兴趣自动检测文件的编码,在某种情况下,您无法控制用于保存文件的编码。 StackOverflow有几个问题可以解决这个问题。 一些粗略的浏览指向确定C#中的字符串编码是一个非常好的。 我最喜欢的答案是指向Mozilla通用字符集探测器的C#端口 。

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