我真的厌倦了试图弄清楚为什么这段代码在 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 的回答通过将 IO 设置为 utf8 为脚本在 Python 3 中工作提供了一种方法。但是仍然存在一个问题:为什么代码在 Python 2 中有效,而在 Python 3 中无效?