2016-08-08 2 views
0

Я получаю JSON с запросами от API (используя Python 3.5), и когда я пытаюсь распечатать (или использовать) JSON, либо response.text, json.loads (...) или response.json(), я получаю UnicodeEncodeError.«UnicodeEncodeError: кодек ascii не может кодировать символ» в Python3

print(response.text) 
UnicodeEncodeError: 'ascii' codec can't encode character '\xc5' in position 676: ordinal not in range(128) 

JSON содержит массив словарей с названиями стран, и некоторые из них содержат специальные символы, например: (только один словарь в двоичный массив, например)

b'[{\n "name" : "\xc3\x85land Islands"\n}] 

Я понятия не имею, почему существует проблема кодирования, а также почему «ascii» используется, когда Requests обнаруживает кодировку UTF-8 (и даже путем установки ее вручную в UTF-8 ничего не меняет).

Редактировать 2: Проблема была в Microsoft Visual Studio Code 1.4. Он не смог напечатать персонажей.

+0

Погрешность гласит, что символ не может быть * кодируется * с ascii - что означает, что проблема не в чтении/декодировании текста, а в кодировке его в байтах (при печати) – janbrohl

+0

Возможный дубликат кодека [UnicodeEncodeError: 'ascii не может кодировать символ u' \ xa0 'в позиции 20: порядковый номер не в диапазоне (128)] (http://stackoverflow.com/questions/994259 4/unicodeencodeerror-ASCII-кодек-косяк-кодирование символов-у-xa0-в-положении-20) –

ответ

0

Если ваш код работает в VS, тогда звучит, что Python не может обработать кодировку встроенной консоли, поэтому по умолчанию используется ASCII. Если вы попытаетесь распечатать любой не-ASCII, тогда Python выдает ошибку, а не печатает текст, который не будет отображаться.

Вы можете принудительно кодировать Python с помощью переменной окружения PYTHONIOENCODING. Установите его в конфигурации запуска для скрипта.

В зависимости от консоли Visual Studio, вы можете уйти с:

PYTHONIOENCODING=utf-8 

или вы, возможно, придется использовать типичный 8bit кодовую как:

PYTHONIOENCODING=windows-1252 
Смежные вопросы