Windows 上的 UnicodeDecodeError,但当 运行 上 Mac 上的代码完全相同时则不会

UnicodeDecodeError on Windows, but not when running the exact same code on Mac

我正在尝试通过 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

这是怎么回事,我该如何解决?

看起来服务器出于某种原因正在发送压缩响应(除非您明确设置 accept-encoding header,否则它不应该这样做)。您可以调整您的代码以使用这样的压缩响应:

import gzip
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:
    if url.info().get('Content-Encoding') == 'gzip':
        body = gzip.decompress(url.read())
    else:
        body = url.read()
data = json.loads(body)