Мне очень надоело пытаться понять, почему этот код работает в 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 загружает данные, часть их не отображается, и я хочу иметь возможность выводить данные на экран.
Второе редактирование: проблема, скорее, связана с печатью, чем с разбором. Ответ Алекса позволяет скрипту работать в Python 3, установив IO в utf8. Но все еще остается вопрос: почему код работал на Python 2, а не на Python 3?