我遇到了困难:
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'
意思是:"·" @en
但在Python 3.7.3中,当尝试
mystring.decode('utf8')
时,遇到了众所周知的错误:UnicodeDecodeError:'utf-8'编解码器无法解码第3个位置上的0xed字节:无效的连续字节
。如果我试图做相反的事情:
'"· "@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”。我希望这能帮助有同样需求的人。