确定文本文件编码模式

时间:2012-05-09 19:08:32

标签: c# utf-8 character-encoding ascii utf-16

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

2 个答案:

答案 0 :(得分: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,具体取决于字节顺序。)

答案 1 :(得分:1)

使用StreamReader识别编码。

示例:

using(var r = new StreamReader(filename, Encoding.Default))
{
    richtextBox1.Text = r.ReadToEnd();
    var encoding = r.CurrentEncoding;
}