このコードがPython3ではなくPython2で機能する理由を理解しようとするのに本当にうんざりしています。私は、jsonのページを取得して解析しようとしているだけです。Python2のコードは次のとおりです。
import urllib, json
response = urllib.urlopen("http://reddit.com/.json")
content = response.read()
data = json.loads(content)
Python3の同等のコードは次のようになると思いました。
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がデータを読み込んでも一部が表示されないので、画面にデータを印刷できるようにしたいと思います。
2番目の編集:問題は構文解析よりも印刷に関係しているようです。Alexの回答は、IOをutf8に設定することにより、スクリプトがPython3で機能する方法を提供します。しかし、まだ疑問が残ります。コードがPython 2で機能したのに、Python3では機能しなかったのはなぜですか。