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 只能保证正确读取所有 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 编码。访问此页面 您的答案