我正在使用以下方式阅读文件:
var source = File.ReadAllText(path);
并且未正确加载角色©
。
然后,我将其改为:
var source = File.ReadAllText(path, Encoding.UTF8);
什么都没有。
我决定尝试使用
var source = File.ReadAllText(path, Encoding.Default);
它完美无缺。
然后我调试了它,并试图找到哪个编码完成了这个技巧,我发现它是UTF-7
。
我想知道的是:
是否建议使用Encoding.Default
,是否可以保证文件的所有字符都可以正常读取?
答案 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