Мне очень надоело пытаться выяснить, почему этот код работает в Python 2, а не в Python 3. Я просто пытаюсь захватить страницу json, а затем проанализировать ее. Здесь код в Python 2:
import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Я думал, что эквивалентный код в Python 3 будет следующим:
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Но он взрывается мне в лицо, потому что данные, возвращаемые read(), являются типами "байтов". Тем не менее, я не могу для жизни меня заставить его преобразовать в то, что json сможет анализировать. Я знаю из заголовков, что reddit пытается отправить utf-8 мне, но я не могу заставить байты декодироваться в utf-8:
import urllib.request, json
response = urllib.request.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content.decode("utf8"))
Что я делаю неправильно?
Изменить: проблема в том, что я не могу получить данные в полезное состояние; хотя json загружает данные, часть которых не отображается, и я хочу иметь возможность печатать данные на экране.
Второе редактирование: похоже, проблема связана скорее с печатью, чем с парсингами. Ответ Alex предоставляет способ для script работать в Python 3, установив IO в utf8. Но остается вопрос: почему код работает в Python 2, но не Python 3?