StreamReader无法检测到BOM

Mic*_*gan 0 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');
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*kov 6

您需要进行Read任何类型的呼叫- 阅读之前StreamReader不会检测编码.即你打电话后得到编码:ReadToEnd

  String line = sr.ReadToEnd();
  mCodingFromBOM = sr.CurrentEncoding;
Run Code Online (Sandbox Code Playgroud)

信息:StreamReader.CurrentEncoding

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