StreamReader无法检测到BOM

时间:2014-09-22 23:37:58

标签: c#

我有以下代码:

using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("shift-jis"), true)) {
    mCertainFileIsUTFFormat = !sr.CurrentEncoding.Equals(Encoding.GetEncoding("shift-jis"));
    mCodingFromBOM = sr.CurrentEncoding;

    String line = sr.ReadToEnd();
    return line.Split('\n');
}

如果没有BOM,基本上读取文件并假设Shift-Jis。唉,这种方法总是,无论如何,返回Shift-JIS编码,即使有问题的文件中有BOM。我在这里做错了什么或者是否存在已知问题?我总是可以打开文件二进制文件并自己完成工作,但这应该是我想做的事情:))

1 个答案:

答案 0 :(得分:6)

您需要拨打任何类型的Read - StreamReader在阅读之前不会检测到编码。即在ReadToEnd电话后获取编码:

  String line = sr.ReadToEnd();
  mCodingFromBOM = sr.CurrentEncoding;

信息:StreamReader.CurrentEncoding

  

在第一次调用StreamReader的任何Read`方法之后,该值可能会有所不同,因为在第一次调用Read方法之前不会进行编码自动检测。