我正在尝试使用以下行读取一些文本文件:
"WE BUY : 10 000.00 USD"
首先我在二进制编辑器中打开了这个文件,在Windows-1251编码中,第13个字符(或者第12个基于0的C#索引)(千位分隔符)是“160十进制代码”或“十六进制中的A0代码”。
然而,在我使用File.ReadAllLines
将此行读入字符串后
在调试器中,我可以看到该字符现在有65533个代码。
“lines [9] [12]65533' 'char”
我的电脑的默认编码 Encoding.Default 是“Windows-1251”。
怎么回事?
更新
尝试使用UTF-8编码打开文件,结果仍然相同。
更新2
问题是文件编码是8位,但调试器显示8位字符“A0”16位值65533。
答案 0 :(得分:2)
一个参数File.ReadAllLines
将假设输入为UTF-8,无论系统默认编码如何。
您还需要指定编码:
var lines = File.ReadAllLines(filename, Encoding.GetEncoding(name));
您可以从name
获取Encoding.Default.WebName
(“Windows-1252”是我从这里获得的,但请在本地查看。)