Encoding.Default 在 .NET 中如何工作

本文关键字:工作 何工作 Default NET Encoding | 更新日期: 2023-09-27 17:56:32

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

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 在 .NET 中如何工作

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

例如,如果文件是 UTF-16 编码的,并且您在 UTF-16

模式下读取它,即使该文件不包含单个 UTF-16 特定字符,您也可以没问题。这一切都归结为文件的编码。

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

不建议使用 Encoding.Default。

引用自MSDN:

不同的

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

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

我认为您的文件采用 utf-7 编码。访问此页面 您的答案