我正在为此苦苦挣扎:
b'"\xc2\xb7\xed\xa0\x81\xed\xb1\x96\xed\xa0\x81\xed\xb1\xb1\xed\xa0\x81\xed\xb1\x9d\xed\xa0\x81\xed\xb1\xbe\xed\xa0\x81\xed\xb1\xaf \xed\xa0\x81\xed\xb1\xa9\xed\xa0\x81\xed\xb1\xa4\xed\xa0\x81\xed\xb1\x93\xed\xa0\x81\xed\xb1\xa9\xed\xa0\x81\xed\xb1\x9a\xed\xa0\x81\xed\xb1\xa7\xed\xa0\x81\xed\xb1\x91"@en'
它来自(dbpedia 3.5.1 ( http://dbpedia.org/page/Shavian_alphabet )) 的 HDT 压缩版本 ( https://github.com/rdfhdt/hdt-cpp ) 的二进制格式并且很好本网站以 utf8 解码 ( https://mothereff.in/utf-8 )
意思是:“·𐑖𐑱𐑝𐑾𐑯 𐑩𐑤𐑓𐑩𐑚𐑧𐑑”@zh
但是在 python 3.7.3 中我遇到了众所周知的错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 3: invalid continuation byte
当试图mystring.decode('utf8')
如果我试图做相反的事情: '"·𐑖𐑱𐑝𐑾𐑯 𐑩𐑤𐑓𐑩𐑚𐑧𐑑"@en'.encode('utf8)
我得到以下表示:b'"\xf0\x90\x91\x96\xf0\x90\x91\xb1\xf0\x90\x91\x9d\xf0\x90\x91\xbe\xf0\x90\x91\xaf \xf0\x90\x91\xa8\xf0\x90\x91\xa4\xf0\x90\x91\x93\xf0\x90\x91\xa9\xf0\x90\x91\x9a\xf0\x90\x91\xa7\xf0\x90\x91\x91"@en'
这不是完全相同的字符串,但随后被repr.decode('utf8')
正确解码为相同的东西......
有人可以帮我理解为什么解码第一个字节字符串不起作用吗?由于错误,我知道第一个字节字符串不是有效的 UTF-8 字符串。但是,为什么它被我链接的网站很好地解码而不能由python完成?先感谢您!
最终编辑 在接受了答案后,我对此做了一些额外的研究,发现这个字符串是使用 CESU-8 编解码器编码的。今天显然已弃用。但有些人仍在使用它......所以,我找到了一个包,它编写了一个可以解码这个字符串的 utf-8 编解码器的变体。我想它会帮助很多和我有同样问题的人。Python 库:https ://github.com/LuminosoInsight/python-ftfy 添加的编解码器是“utf-8-variants”。我希望这将帮助与我有相同需求的人。
慕森王
相关分类