我正在尝试对此进行编码:
"LIAISONS Ã NEW YORK"
对此:
"LIAISONS à NEW YORK"
print(ascii(value))
的输出是
'LIAISONS \xc3 NEW YORK'
我先尝试在cp1252中进行编码,然后尝试对utf8进行解码,但是我得到了:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 9: invalid continuation byte
我还尝试使用Latin-1 / ISO-8859-2进行编码,但是这种方法也不起作用。
我该怎么做?
答案 0 :(得分:1)
您无法从输入值转到所需的输出,因为数据不再完整。
如果您输入的值是实际的Mojibake从UTF-8重新编码为拉丁编码,那么对于à
码点,您将有两个字节:
>>> target = "LIAISONS à NEW YORK"
>>> target.encode('UTF-8').decode('latin1')
'LIAISONS Ã\xa0 NEW YORK'
这是因为à
的UTF-8编码为C3 A0:
>>> 'à'.encode('utf8').hex()
'c3a0'
在您的输入中,A0
字节(在大多数基于拉丁语的编解码器中不映射到可打印的字符)已被过滤掉。您不能凭空重新创建它,因为UTF-8对的C3
字节可以在其他任何字节之前,所有这些都会导致有效输出:
>>> b'\xc3\xa1'.decode('utf8')
'á'
>>> b'\xc3\xa2'.decode('utf8')
'â'
>>> b'\xc3\xa3'.decode('utf8')
'ã'
>>> b'\xc3\xa4'.decode('utf8')
'ä'
,如果没有其他自然语言处理,就很难选择其中之一。在这种情况下,字节80-A0和AD均为UTF-8中的有效连续字节,但是这些字节均未导致可打印的Latin-1字符,因此这里至少有18种不同的可能性。