StreamReader将' - '(alt + 0150)读为 ,即使我有UTF-8编码并且我将detectEncodingFromByteOrderMarks(BOM)设置为true。任何人都可以指导我吗?
答案 0 :(得分:3)
该字节代码不会出现在utf-8编码文本中。在utf-8中编码时,它是'\ u2013',0xe2 + 0x80 + 0x93。如果在数字键盘上键入Alt + 0150时出现此字符,则默认系统代码页可能为1252.只需将Encoding.Default传递给StreamReader构造函数即可。
答案 1 :(得分:2)
您需要知道用于编码文本的编码。没有办法解决这个问题。尝试不同的编码,直到获得理想的结果。
来自MSDN:
detectEncodingFromByteOrderMarks参数检测编码 查看流的前三个字节。它自动 识别UTF-8,little-endian Unicode和big-endian Unicode文本 如果文件以适当的字节顺序标记开头。除此以外, 使用用户提供的编码。请参阅Encoding.GetPreamble 更多信息的方法。
这意味着使用该BOM只是一个额外的事情,可能会或可能不会或可以轻易覆盖
答案 2 :(得分:1)
正如其他用户所写,此问题的可能原因是您尝试阅读的文件的ANSI编码。我重新创建了用ANSI编码保存文件时所描述的问题。
尝试使用此代码:
var stream = new StreamReader(fileName, Encoding.Default);
Encoding.Default 参数在此非常重要。此代码应该读取您正确提到的字符。