我正在写一个应用程序,它接受一些大量的文本作为输入,可以是任何字符编码,我想把它全部保存在UTF-8中。我不会接收或不能信任随数据一起定义的字符编码(如果有的话)。
我曾经使用Pythons库chardet来检测原始字符编码http://pypi.python.org/pypi/chardet,但最近遇到了一些问题,我注意到它不支持斯堪的纳维亚编码(例如iso-8859-1)。除此之外,它需要大量的时间/CPU/mem才能得到结果。对于2MB的文本文件,~40秒。
我尝试只使用标准的Linux文件
file -bi name.txt到目前为止,它为我提供了100%的结果。对于一个2MB的文件,这个值约为0.1s。它也支持斯堪的纳维亚字符编码。
所以,我想使用文件的优势是显而易见的。它的缺点是什么?我是不是遗漏了什么?
发布于 2012-11-29 19:54:53
由于编码不完全标准,旧的MS-DOS和Windows格式的文件可能会被检测为unknown-8位,而不是ISO-8859-X。相反,Chardet将执行有根据的猜测,并报告置信度值。
http://www.faqs.org/faqs/internationalization/iso-8859-1-charset/
如果您不想处理旧的、奇异的、不符合标准的文本文件,我认为您可以使用file -i而不会有太多问题。
发布于 2013-02-21 01:33:30
我发现"chared“(http://code.google.com/p/chared/)是相当准确的。您甚至可以为不支持的语言训练新的编码检测器。
当chardet开始出现问题时,这可能是一个很好的选择。
https://stackoverflow.com/questions/13591926
复制相似问题