【发布时间】:2019-05-21 21:46:48
【问题描述】:
我正在尝试通过 API 下载 json 数据。代码如下:
import urllib.request, ssl, json
context = ssl._create_unverified_context()
rsbURL = "https://rsbuddy.com/exchange/summary.json"
with urllib.request.urlopen(rsbURL, context=context) as url:
data = json.loads(url.read().decode('UTF-8'))
这段代码在我的 Mac 上运行良好,我确认 data 是它应该是的——json 字符串。但是,当我在 Windows 上运行完全相同的代码时,会出现此错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
发生了什么,我该如何解决?
【问题讨论】:
-
你能试试没有
json.loads和.decode()命令的代码吗?您的 SSL 库可能因环境而异。这可能会导致 url 在一个环境(可能是 Windows)上读取错误。 -
我刚刚尝试过,在 Mac 上我得到了
b'{"2":{"id":2,"name":"Cannonball","members":true,"sp":5,"buy_average":163,"buy_quantity":276835,"sell_average":161,"sell_quantity":642206,"overall_average":161,"overall_quantity":919041}...,它可以作为 JSON 读取。但在 Windows 上,我得到b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xcc\xbd]s$G\x8e%\xfaWhz\xd2\xda\xf4\xae1"\xf2s\xde\xa4R\xb7\xbagZ\,它不能作为 JSON 读取。当我尝试时,错误是一样的:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte -
该代码适用于我在 Windows 下。您可以尝试将问题分为两个子问题:文件下载和文件解码。您可以保存文件,然后使用
open('summary.json', 'rb').read().decode('utf-8')看看是否有效。
标签: python python-3.x python-unicode