gpt4 book ai didi

python - chardet 在 Big5 上显然是错误的

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:09 42 4
gpt4 key购买 nike

我正在解码一个大型(大约 1 GB)的平面文件数据库,它随意混合了字符编码。到目前为止,python 模块 chardet 在识别编码方面做得很好,但如果遇到了绊脚石......

In [428]: badish[-3]
Out[428]: '\t\t\t"Kuzey r\xfczgari" (2007) {(#1.2)} [Kaz\xc4\xb1m]\n'

In [429]: chardet.detect(badish[-3])
Out[429]: {'confidence': 0.98999999999999999, 'encoding': 'Big5'}

In [430]: unicode(badish[-3], 'Big5')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)

~/src/imdb/<ipython console> in <module>()

UnicodeDecodeError: 'big5' codec can't decode bytes in position 11-12: illegal multibyte sequence

chardet 报告对它的编码选择非常有信心,但它不解码......还有其他明智的方法吗?

最佳答案

不能过分强调的一点:您不应该期望从一段如此短且其中包含如此高比例的普通旧 ASCII 字符的文本中进行任何合理的编码猜测。

关于 big5:chardet 在检查 CJK 编码时广撒网。 big5中有很多未使用的slot,chardet也不排除。正如您所发现的,该字符串不是有效的 big5。它实际上是有效的(但没有意义)big5_hkscs(它使用了 big5 中的很多漏洞)。

有大量适合该字符串的单字节编码。

在这个阶段有必要寻求带外帮助。谷歌搜索“Kuzey etc”搜索到土耳其电视剧“Kuzey rüzgari”,所以我们现在有了这种语言。

这意味着如果它是由熟悉土耳其语的人输入的,它可能在 cp1254、iso_8859_3(或 _9)或 mac_turkish 中。所有这些都会在结尾附近为 [Kaz??m] 单词产生乱码。根据 imdb 网站,这是一个字符的名称,它与通过 cp1254 和 iso-8859-9 (Kazım) 解码获得的相同的乱码。使用您建议的 iso-8859-2 解码得到 KazÄąm,这看起来也不太合理。

你能概括一下吗?我不这么认为:-)

我强烈建议您在这种情况下使用 latin1 对其进行解码(这样就不会损坏任何字节)并将记录标记为具有未知编码。您还应该使用最小长度截止值。

更新 对于它的值(value),the_two_bytes_in_the_character_name.decode('utf8') 生成 U+0131 拉丁文小写字母 DOTLESS I,用于土耳其语和阿塞拜疆语。进一步谷歌搜索表明 Kazım 是一个足够常见的土耳其名字。

关于python - chardet 在 Big5 上显然是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731684/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com