Полученный JSON верен, и проблема не имеет ничего общего с поиском URL или преобразованием JSON.Проблема в выводе терминала через print
.При печати до Python 3.6 строк Unicode на терминал кодируется вывод в кодировке терминала в Windows, следовательно, UnicodeEncodeError
.Например, в командной строке Windows для США по умолчанию установлено значение cp437
:
C:\>chcp
Active code page: 437
В pre-Python 3.6 печать строки Unicode в терминале не удалась, если используются символы вне кодовой страницы.Обратите внимание, что он пытается использовать активную кодовую страницу терминала:
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\N{EURO SIGN}'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u20ac' in position 0: character maps to <undefined>
В Python 3.6 печать символа в Windows использует API-интерфейсы консоли Unicode и игнорирует кодовую страницу:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\N{EURO SIGN}')
€
Чтобы обойти ошибку кодирования, в Python 3.x вы можете print(ascii(resp.json()))
проверить, что ответ правильный.Python 2.x вы можете использовать print repr(resp.json())
.Оба отображают только символы ASCII, а не-ASCII печатаются как escape-коды.
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print repr(u'\N{EURO SIGN}')
u'\u20ac'