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

Osc*_*ros 13 c# io file-io encoding file

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

var source = File.ReadAllText(path);
Run Code Online (Sandbox Code Playgroud)

并且角色©没有正确加载.

然后,我将其更改为:

var source = File.ReadAllText(path, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

没别的了.

我决定尝试使用

var source = File.ReadAllText(path, Encoding.Default);
Run Code Online (Sandbox Code Playgroud)

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

我想知道的是:

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

Teo*_*gul 8

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

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

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


Ale*_*Aza 8

建议不要使用Encoding.Default.

MSDN引用:

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