12

我正在编写一个应用程序,它需要大量文本作为输入,可以是任何字符编码,我想将它全部保存在 UTF-8 中。我不会收到或无法信任随数据定义的字符编码(如果有的话)。

我有一段时间使用 Pythons 库 chardet 来检测原始字符编码http://pypi.python.org/pypi/chardet,但最近遇到了一些问题,我注意到它不支持斯堪的纳维亚编码(例如iso-8859-1)。除此之外,获得结果需要大量的时间/CPU/内存。2MB 文本文件约 40 秒。

我尝试只使用标准的 Linux 文件

file -bi name.txt

到目前为止,我的所有文件都为我提供了 100% 的结果。对于 2MB 的文件,这大约需要 0.1 秒。它还支持斯堪的纳维亚字符编码。

所以,我想使用文件的优势是显而易见的。有什么缺点?我错过了什么吗?

4

2 回答 2

4

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

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

如果您不处理旧的、异国情调的、不合标准的文本文件,我认为您可以file -i毫无问题地使用。

于 2012-11-29T11:54:52.930 回答
2

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

当 chardet 开始行动时,这可能是一个不错的选择。

于 2013-02-20T17:33:30.287 回答