Python запрашивает UTF-8 пост-ответ получает ошибку декодирования ASCII - PullRequest
0 голосов
/ 25 сентября 2018

Я отправляю почтовые запросы в API RESTful через запросы Python, и иногда я получаю следующую ошибку в операциях r.text, r.content andrequests.utils.get_unicode_from_response (r).

Я использую python3.

r:

r = requests.post(...)

и сообщение об ошибке:

'ascii' codec can't encode character '\u015f' in position 133: ordinal not in range(128)

(информация \ символ и позиция изменяются при разных запросах, но остальная часть сообщениято же самое.)

Я попытался извлечь информацию о кодировке после ответа, и все они говорят мне, что кодировка находится в utf-8, но я не могу декодировать ответ, и я не могу понять, почему utf-8 кодированных байтов получают ошибку ascii (в отличие от ошибки utf-8).

Вот методы, которые я попытался выяснить, метод декодирования:

>>> r.encoding
>>> utf-8

>>> chardet.detect(r.content)
>>> {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

>>> r.headers
>>> {... 'Content-Type': 'application/json; charset=utf-8 ...}

Как следуетЯ декодирую сообщения?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

\u015f - это Unicode. Вы должны преобразовать его в строку

("\u045a".encode()).decode("gbk") #using gbk cause question running on windows

Изменить на 9,27,2018. Я обнаружил, что это может быть широкий вопрос на другой платформе. В частности, в Windows.

0 голосов
/ 25 сентября 2018

Ответ представляет собой набор строковых байтов в кодировке utf-8, которые могут содержать символы, отсутствующие в таблице ASCII.Если это произойдет, вы получите указанную ошибку.Таким образом, вы можете либо игнорировать ошибки

r.text.encode('ascii', 'ignore')

, либо обрабатывать ответ как строку utf-8

...