能够从python 3.7.3中的字节正确解码/编码]]

问题描述 投票:5回答:1

我正在为此苦苦挣扎:

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(https://github.com/rdfhdt/hdt-cpp)的HDT压缩版本(http://dbpedia.org/page/Shavian_alphabet)的二进制格式,并且已被本网站(https://mothereff.in/utf-8)在utf8中很好地解码]

其含义是:“·𐑖𐑱𐑝𐑾𐑯𐑩𐑤𐑓𐑩𐑚𐑧𐑑” @ en

但是在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”。我希望这会帮助比我有同样需求的人们。

我正在为此苦苦挣扎: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 \ xa \ xed \ ...

python utf-8 decode cesu-8
1个回答
6
投票

[似乎Python不想接受某些字节序列作为有效的UTF-8,而某些网站(https://mothereff.in/utf-8)接受它。其中之一一定是错的,对吗?让我们看看。

© www.soinside.com 2019 - 2024. All rights reserved.