python3 расшифровка str в utf8 - PullRequest
       86

python3 расшифровка str в utf8

1 голос
/ 06 апреля 2020

У меня есть переменная str в python3 .6, которая выглядит следующим образом:

\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

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вам необходимо использовать bytes для 8-битных строковых данных, а не для обычной строки. Обратите внимание на 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()
'中国民生银行'
0 голосов
/ 06 апреля 2020

Похоже на латиницу-1 mojibake , текст в кодировке UTF-8, который был неправильно декодирован как латиница-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". Имеет ли смысл вывод?

...