【问题标题】:Wrong cyrillic characters in a russian file - can't decode/encore properly俄语文件中的错误西里尔字符 - 无法正确解码/重新编码
【发布时间】: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 中,您希望以二进制模式打开文件以检查内容而不进行解码。
  • sqlite3 Python 数据库适配器处理 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'

标签: python encoding cyrillic


【解决方案1】:

第一个也是最重要的问题 - 文本不是 UTF-8,而是 KOI8R。 所以如果你需要通过 Python 解码,你可以参考这个答案 - string encode / decode - 它可能会给你一些线索。

我已经解码了你指定的文本 - 享受:

ёкающее UNK ёкающий UNKA
ёкающего    UNK ёкающий UNKA
ёкающей UNK ёкающий UNKA
ёкающем UNK ёкающий UNKA
ёкающему    UNK ёкающий UNKA

【讨论】:

  • 谢谢你,但是我已经遇到了这个可能的解码翻译,并且在检查了许多解码单词的含义之后,它们在法语中根本没有任何意义......我想它是结果解码接近俄语,但这不是真正的俄语......我会看看你提供的页面,再次感谢! :)
  • 是的,我也试过这个,即使是 koi8_u 编解码器,但仍然没有西里尔字母表示。我的 shell 告诉我文件是 utf-8,但你认为它是 koi8_r 吗? (我确实读过,如果您从一开始就不知道,很难从文件中“猜测”编码......)。我认为有一种方法,但它只是找到完美的解码/编码序列(仍在努力):)
  • @Xhattam 我的母语是俄语,翻译对我来说很有意义(否则我不会发布它)。这些是单词的不同大小写和性别,被翻译为“使用/说 YO 声音的人” - 不知道你为什么需要它,但无论如何,你有什么。
  • 有吗?好吧,我相信你!只是因为,作为一个构建多语言数据库的非母语人士,我必须依靠谷歌翻译来检查语言是否是我正在寻找的语言,它在法语中没有意义,但我怀疑这可能是因为它将西里尔字符“翻译”成拉丁语可读的字符,也许......但无论如何,谢谢,我会去的!谢谢安迪! :)
猜你喜欢
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多