C#中的自动编码检测

And*_*hin 5 .net c# encoding

可能重复:
在C#中确定字符串的编码

许多文本编辑器(如Notepad ++)可以检测任意文件的编码.我可以在C#中检测到文件的编码吗?

Dar*_*rov 8

一个StreamReader的将尝试自动检测文件的编码,如果有试图读取时,BOM:

public class Program
{
    static void Main(string[] args)
    {
        using (var reader = new StreamReader("foo.txt"))
        {
            // Make sure you read from the file or it won't be able
            // to guess the encoding
            var file = reader.ReadToEnd();
            Console.WriteLine(reader.CurrentEncoding);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `StreamReader`确实*不*尝试检测编码,它只是使用默认值.请参阅您链接的文档,其中显示:"使用默认字符编码和默认缓冲区大小." (6认同)
  • +1,虽然值得补充说这不是万无一失的; 许多编码"看起来"与使用的简单检测方法相同.即使是最好的(谷歌之类的,可以负担得起进行大量的运算并且有大量的数据来比较流)也会考虑"高"八位字节的不同可能含义,并非100%完美.如果可能的话,最好准确地传达这些信息. (2认同)
  • [MSDN文档](https://msdn.microsoft.com/zh-cn/library/hh399669.aspx)确实说将使用默认字符编码,但是我尝试将不同的BOM传递给StreamReader,并且它正确地识别了它们(即reader.CurrentEncoding返回了预期的编码)。我测试了UTF-8,UTF-16-BE和UTF-16LE。但是请注意@Darin的注释-如果您不读取某些数据,它将不会起作用。 (2认同)