与 的StreamReader奇怪的错误

时间:2011-11-14 21:14:23

标签: c# streamreader

StreamReader将' - '(alt + 0150)读为 ,即使我有UTF-8编码并且我将detectEncodingFromByteOrderMarks(BOM)设置为true。任何人都可以指导我吗?

3 个答案:

答案 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 参数在此非常重要。此代码应该读取您正确提到的字符。