在Python中使用编码检测,是否使用chardet库?

时间:2012-11-27 19:51:27

标签: python encoding chardet

我正在编写一个应用程序,它需要大量的文本作为输入,可以是任何字符编码,我想将它们全部保存在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。它也支持斯堪的纳维亚字符编码。

所以,我猜使用文件的优势很明显。有什么缺点?我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

旧的MS-DOS和Windows格式的文件可以被检测为unknown-8bit而不是ISO-8859-X,因为不完全标准的encondings。 Chardet将执行有根据的猜测,报告置信度值。

http://www.faqs.org/faqs/internationalization/iso-8859-1-charset/

如果您不处理旧的,异国情调的,不合标准的文本文件,我认为您可以使用file -i而没有太多问题。

答案 1 :(得分:2)

我发现“chared”(http://code.google.com/p/chared/)非常准确。您甚至可以为不支持的语言训练新的编码检测器。

当chardet开始表演时,这可能是一个很好的选择。