我正在尝试创建一种可以检测文本文件的编码模式的方法。我知道那里有很多,但我确定我的文本文件是ASCII
,UTF-8
或UTF-16
. 我只需要检测这三个。有人知道这样做的方法吗?
问问题
849 次
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 FF
或FF 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 回答