Encoding.Default与File.ReadAllText中没有编码不一样?

Ben*_*jol 10 .net file-io encoding

(对不起,如果这是一个骗局)

我花了很长时间才试图正确阅读文本文件.

开始使用File.ReadAllText(path)并搞砸了角色后,我尝试了几种变体,File.ReadAlltext(path, Encoding)之后我陷入困境,试图分析我的输入文件以确定哪个字节是问题,等等.

无奈之下我试过了File.ReadAllText(path, Encoding.Default),哪个有效!

我现在正在努力理解为什么默认值显然只是默认值,如果你指定它.

(我的缩减测试字符串是+4433ç,我将其保存在记事本中作为ANSI - 尽管瑞士法语区域设置......)

Dan*_*iel 10

Encoding.Default是系统的ANSI代码页.

如果你没有指定编码,File.ReadAllText会做什么:

  • 首先,它检查是否有字节顺序标记(UTF-8,UTF-16或UTF-32).如果有,它使用字节顺序标记中指定的编码.
  • 否则,它使用UTF-8.

因此,获取系统ANSI代码页的唯一方法是明确指定Encoding.Default.

  • Jivko,我不认为你的评论是正确的.没有编码的ReadAllText调用ReadAllText(path,Encoding.UTF8),但ReadAllText使用的内部流将读取BOM(如果存在)并用检测到的编码替换Encoding.UTF8.这是因为在StreamReader构造函数中将detectEncodingFromByteOrderMarks设置为true. (4认同)