我正在尝试创建一个可以检测文本文件的编码模式的方法。我知道那里有很多,但我确定我的文本文件可以是ASCII
,UTF-8
或UTF-16
。我只需要检测这三个。有人知道这样做的方法吗?
答案 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 FF
或FF FE
,具体取决于字节顺序。)
答案 1 :(得分:1)
使用StreamReader识别编码。
示例:
using(var r = new StreamReader(filename, Encoding.Default))
{
richtextBox1.Text = r.ReadToEnd();
var encoding = r.CurrentEncoding;
}