如何检测文本文件的编码/代码页
在我们的应用程序中,我们接收来自不同来源的文本文件( .txt
, .csv
等)。 在阅读时,这些文件有时会包含垃圾,因为这些文件是在不同的/未知的代码页中创建的。
有没有办法(自动)检测文本文件的代码页?
该detectEncodingFromByteOrderMarks
,对StreamReader
构造,适用于UTF8
等统一标记的文件,但是我正在寻找一种方法来检测代码页,像ibm850
, windows1252
。
感谢您的回答,这就是我所做的。
我们收到的文件来自最终用户,他们对代码页没有任何线索。 接收者也是最终用户,现在这是他们对代码页的了解:代码页存在并且很烦人。
解:
你无法检测到代码页,你需要告诉它。 你可以分析字节并猜测它,但是这可能会导致一些奇怪的(有时候很有趣)的结果。 我现在找不到它,但我确信记事本可以被诱骗显示中文的英文文本。
无论如何,这是你需要阅读的:绝对最低限度的每一个软件开发者绝对,积极地必须知道Unicode和字符集(没有借口!)。
具体来说,乔尔说:
关于编码的一个最重要的事实
如果你完全忘记了我刚才解释的一切,请记住一个非常重要的事实。 在不知道使用哪种编码的情况下生成一个字符串是没有意义的。 你不能再将头伸进沙子里,假装“简单”文本是ASCII。 没有像纯文本那样的东西。
如果您有字符串,内存,文件或电子邮件中的信息,则必须知道其中的编码,或者无法正确解释或显示给用户。
如果您正在寻找检测非UTF编码(即没有BOM),那么您基本上只能对文本进行启发式分析和统计分析。 你可能想看看关于通用字符集检测的Mozilla论文(同样的链接,通过Wayback Machine有更好的格式化)。
您是否尝试过Mozilla Universal Charset Detector的C#端口?
来自http://code.google.com/p/ude/的示例
public static void Main(String[] args)
{
string filename = args[0];
using (FileStream fs = File.OpenRead(filename)) {
Ude.CharsetDetector cdet = new Ude.CharsetDetector();
cdet.Feed(fs);
cdet.DataEnd();
if (cdet.Charset != null) {
Console.WriteLine("Charset: {0}, confidence: {1}",
cdet.Charset, cdet.Confidence);
} else {
Console.WriteLine("Detection failed.");
}
}
}
链接地址: http://www.djcxy.com/p/23707.html
上一篇: How can I detect the encoding/codepage of a text file
下一篇: Separate objects from the background. ( Using contour detection )