我正在编写一个应用程序,它需要大量的文本作为输入,可以是任何字符编码,我想将它们全部保存在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。它也支持斯堪的纳维亚字符编码。
所以,我猜使用文件的优势很明显。有什么缺点?我错过了什么吗?
答案 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开始表演时,这可能是一个很好的选择。