【发布时间】:2012-11-27 19:51:27
【问题描述】:
我正在编写一个应用程序,该应用程序将大量文本作为输入,可以采用任何字符编码,并且我想将其全部保存为 UTF-8。我不会收到或无法信任随数据定义的字符编码(如果有的话)。
我有一段时间使用 Python 库 chardet 来检测原始字符编码 http://pypi.python.org/pypi/chardet,但最近遇到了一些问题,我注意到它不支持斯堪的纳维亚编码(例如 iso-8859-1)。 除此之外,获得结果需要大量的时间/CPU/内存。 2MB 文本文件约 40 秒。
我尝试只使用标准的 Linux 文件
file -bi name.txt
到目前为止,我的所有文件都为我提供了 100% 的结果。对于 2MB 的文件,这大约需要 0.1 秒。它还支持斯堪的纳维亚字符编码。
所以,我想使用文件的优势是显而易见的。有什么缺点?我错过了什么吗?
【问题讨论】:
-
如果它是 100% 准确的,那么我想知道为什么有人没有使用
file使用的相同规则来实现它(或chardet)...... - 你试过 @ 987654326@ 与chardet在大量测试数据中的比较? -
FWIW,ISO-8859-1(及其修订版,-15)不仅是斯堪的纳维亚语,它还用于许多其他基于拉丁语的脚本。如果输入是“大部分是 ASCII”而不是 UTF-8,那么 ISO-8859-1 是一个很好的猜测。 en.wikipedia.org/wiki/ISO/IEC_8859#The_Parts_of_ISO.2FIEC_8859
-
乔恩,我完全同意。因此我的问题。我无法获得足够的数据来使这种方法具有统计学意义,因此很遗憾,您的问题的答案是否定的。
-
Thomas,是的,对不起,你完全正确。我遇到的问题涉及斯堪的纳维亚语言,我想这就是我写它作为示例的原因。是的,同意这可能是一个很好的猜测,但如果有更准确的快速方法 - 我更愿意使用它。