【发布时间】:2011-11-14 21:14:23
【问题描述】:
StreamReader 将 '–' (alt+ 0150) 读取为 �,即使我有 UTF-8 编码并且我已将 detectEncodingFromByteOrderMarks (BOM) 设置为 true。有人可以指导我吗?
【问题讨论】:
-
你试过Unicode编码吗?
标签: c# streamreader
StreamReader 将 '–' (alt+ 0150) 读取为 �,即使我有 UTF-8 编码并且我已将 detectEncodingFromByteOrderMarks (BOM) 设置为 true。有人可以指导我吗?
【问题讨论】:
标签: c# streamreader
该字节码不会出现在 utf-8 编码文本中。以 utf-8 编码时为 '\u2013', 0xe2 + 0x80 + 0x93。如果您在数字键盘上键入 Alt+0150 时收到此字符,则您的默认系统代码页可能是 1252。只需将 Encoding.Default 传递给 StreamReader 构造函数即可。
【讨论】:
您需要知道用于对文本进行编码的编码。没有办法解决这个问题。尝试不同的编码,直到获得所需的结果。
来自 MSDN:
detectEncodingFromByteOrderMarks 参数通过以下方式检测编码 查看流的前三个字节。它会自动 识别 UTF-8、little-endian Unicode 和 big-endian Unicode 文本 如果文件以适当的字节顺序标记开始。否则, 使用用户提供的编码。请参阅 Encoding.GetPreamble 方法以获取更多信息。
这意味着使用该 BOM 只是一个额外的东西,可能会也可能不会起作用,或者很容易被覆盖
【讨论】:
正如其他用户所写,此问题的可能原因是您尝试读取的文件的 ANSI 编码。当我以 ANSI 编码保存文件时,我重新创建了您所描述的问题。
尝试使用此代码:
var stream = new StreamReader(fileName, Encoding.Default);
Encoding.Default 参数在这里很重要。此代码应正确读取您提到的字符。
【讨论】: