python3 将 str 解码为 utf8

python3 decode str to utf8

我在Python3.6中有一个str变量,如下:

\xc3\xa4\xc2\xb8\xc2\xad\xc3\xa5\xc2\x9b\xc2\xbd\xc3\xa6\xc2\xb0\xc2\x91\xc3\xa7\xc2\x94\xc2\x9f\xc3\xa9\xc2\x93\xc2\xb6\xc3\xa8\xc2\xa1\xc2\x8c

我想把str解码成中文,我先把str编码再解码,不行,我的代码如下:

str = '\xE4\xB8\xAD\xE5\x9B\xBD\xE6\xB0\x91\xE7\x94\x9F\xE9\x93\xB6\xE8\xA1\x8C'
str.encode('utf-8').decode('unicode_escape')

输出如下:

ä¸Â\xadÃ¥Â\x9b½æ°Â\x91çÂ\x94Â\x9féÂ\x93¶è¡Â\x8c

看起来像 latin-1 mojibake,UTF-8 编码的文本被错误地解码为 latin-1。

>>> s = '\xE4\xB8\xAD\xE5\x9B\xBD\xE6\xB0\x91\xE7\x94\x9F\xE9\x93\xB6\xE8\xA1\x8C'
>>> s.encode('latin-1').decode('utf-8')
'中国民生银行'

我看不懂中文,但是Google翻译认为是"China Minsheng Bank"。输出有意义吗?

8 位字符串数据需要使用bytes,而不是普通字符串。注意字符串前面的 b

>>> b'\xE4\xB8\xAD\xE5\x9B\xBD\xE6\xB0\x91\xE7\x94\x9F\xE9\x93\xB6\xE8\xA1\x8C'.decode()
'中国民生银行'

您的第一个 str 解码错误 double UTF-8,您可以通过以下方式修复它:

>>> s = '\xc3\xa4\xc2\xb8\xc2\xad\xc3\xa5\xc2\x9b\xc2\xbd\xc3\xa6\xc2\xb0\xc2\x91\xc3\xa7\xc2\x94\xc2\x9f\xc3\xa9\xc2\x93\xc2\xb6\xc3\xa8\xc2\xa1\xc2\x8c'
>>> s.encode("ISO-8859-1").decode().encode("ISO-8859-1").decode()
'中国民生银行'