2

我正在尝试创建一种可以检测文本文件的编码模式的方法。我知道那里有很多,但我确定我的文本文件是ASCII,UTF-8UTF-16. 我只需要检测这三个。有人知道这样做的方法吗?

4

2 回答 2

4

首先,以二进制模式打开文件并将其读入内存。

对于 UTF-8(或 ASCII),请进行验证检查。您可以使用解码文本Encoding.GetEncoding("UTF-8", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetString(bytes)并捕获异常。如果没有得到,则数据是有效的 UTF-8。这是代码:

private bool detectUTF8Encoding(string filename)
{
    byte[] bytes = File.ReadAllBytes(filename);
    try {
        Encoding.GetEncoding("UTF-8", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback).GetString(bytes);
        return true;
    } catch {
        return false;
    }
}

对于 UTF-16,检查 BOM(FE FFFF FE,取决于字节顺序)。

于 2012-05-09T19:21:45.537 回答
1

使用 StreamReader 识别编码。

例子:

using(var r = new StreamReader(filename, Encoding.Default))
{
    richtextBox1.Text = r.ReadToEnd();
    var encoding = r.CurrentEncoding;
}
于 2012-05-09T19:11:40.060 回答