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