流阅读器"检测编码"奇怪的行为

  • 本文关键字:编码 c# .net windows io stream
  • 更新时间 :
  • 英文 :


我只是在做这个:

using (var f = File.Open("File.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
      using (var sw = new StreamWriter(f, Encoding.ASCII))
      {
          sw.WriteLine("Test");
      }
}
using (var f = File.Open("File.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
      using (var sr = new StreamReader(f, detectEncodingFromByteOrderMarks: true))
      {
          var r = sr.ReadLine();
          var e = sr.CurrentEncoding;
          //e = UTF8Encoding ???????? !!!!!
      }
}

为什么流没有正确检测到编码?

请参阅StreamReader.CurrentEncoding 上的MSDN链接

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

我找到了

来自MSDN:

detectEncodingFromByteOrderMarks参数通过查看流的前三个字节。它自动识别UTF-8、小端Unicode和大端Unicode文本如果文件以适当的字节顺序标记开始。否则使用UTF8Encoding。有关详细信息,请参阅Encoding.GetPreamble方法信息

相关内容

  • 没有找到相关文章

最新更新