StreamReader的奇怪错误

本文关键字:错误 StreamReader | 更新日期: 2023-09-27 18:14:41

StreamReader读取' - ' (alt+ 0150)作为-即使我有UTF-8编码和我有detectEncodingFromByteOrderMarks (BOM)设置为true。有谁能指点我一下吗?

StreamReader的奇怪错误

该字节码不会出现在utf-8编码的文本中。当以utf-8编码时,它是''u2013', 0xe2 + 0x80 + 0x93。如果您在数字键盘上键入Alt+0150时得到这个字符,那么您的默认系统代码页可能是1252。只需传递Encoding。默认为StreamReader构造函数。

您需要知道用于对文本进行编码的编码方式。这是没有办法的。尝试不同的编码,直到你得到想要的结果。

从MSDN:

detectEncodingFromByteOrderMarks参数通过查看流的前三个字节。它会自动识别UTF-8、小端Unicode和大端Unicode文本如果文件以适当的字节顺序标记开始。否则,使用用户提供的编码。参见编码。GetPreamble方法获取更多信息。

这意味着使用BOM只是一个额外的东西,可能工作,也可能不工作,或者可以很容易地覆盖

正如其他用户所写的那样,这个问题的可能原因是您试图读取的文件的ANSI编码。当我以ANSI编码保存文件时,我已经重新创建了您所描述的问题。

尝试使用以下代码:

 var stream = new StreamReader(fileName, Encoding.Default);

编码。默认参数在这里很重要。这段代码应该能正确读取您所提到的字符。