【发布时间】:2014-05-06 14:20:20
【问题描述】:
我一直在为编码而苦苦挣扎,因为我正在用 Python 中的 sqlite3 构建一个多语言数据库。 到目前为止,我已经解决了所有问题,这要感谢 Google 和 Stack Overflow 上的文章。 我在俄语、斯洛文尼亚语、波兰语、西班牙语、法语方面遇到了问题……但都解决了,除了这个我无法修复的 ONE 文件。
我以为我在这个网站上找到了可能的解决方案:http://www.smashingmagazine.com/2012/06/06/all-about-unicode-utf8-character-sets/,我什至找到了一个解码器,这让我非常接近解决问题。但它只产生了部分可以理解的俄语......(我相信它在其他情况下会有所帮助:http://2cyr.com/decode/?lang=fr 并且它也存在于英语中)。
但是这最后一个文件将是我的终结。这是主要问题:我知道它是俄语,因为给我它的语言学家建造了它,并且知道它是俄语的。但是,文件本身看起来像这样:
£ËÁÀÝÅÅ UNK £ËÁÀÝÉÊ UNKA
£ËÁÀÝÅÇÏ UNK £ËÁÀÝÉÊ UNKA
£ËÁÀÝÅÊ UNK £ËÁÀÝÉÊ UNKA
£ËÁÀÝÅÍ UNK £ËÁÀÝÉÊ UNKA
£ËÁÀÝÅÍÕ UNK £ËÁÀÝÉÊ UNKA
根据我的外壳,它是用 utf-8 编码的。因此,我一直在尝试解码 utf-8 并将其编码为我能找到的所有俄罗斯编码(ISO-8859-5、koi8_r、koi8_u、cp1252、cp1251...)。它从来没有奏效。我还尝试以所有这些编码保存文件并以相反的方式解码,但没有太大成功...
它必须进入数据库(sqlite),我知道所需的编码是 utf-8。 我之前使用的俄语文件是“正确”编写的(用西里尔文),我只需要弄清楚要使用哪种编码。但是在这里,我觉得我已经尝试了一切,我只是没有得到任何结果......
我实际上想知道是否可以解码这样的文件,因为它不是西里尔字母。
欢迎任何建议:)
【问题讨论】:
-
文件中一行的
repr()是什么样的?另外,这是 Python 2 还是 3?在 Python 3 中,您希望以二进制模式打开文件以检查内容而不进行解码。 -
sqlite3Python 数据库适配器处理 Python 的unicode数据类型很好;无需自己对数据进行编码。只需从文件中解码(特别是如果它是UTF-8),就是这样。 -
谢谢,我已经这样做了,但是得到了这个错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
-
这是一个没有解码/编码的行的代表:'\xc2\xa3\xc3\x8b\xc3\x81\xc3\x94\xc3\x98'