Python解析在线JSON文件时遭遇UnicodeDecodeError错误求助
解决Python解析JSON时的UnicodeDecodeError问题
报错根源:目标URL返回的内容是gzip压缩格式,并非原始UTF-8编码的JSON文本。直接调用
decode()按UTF-8解码时,压缩数据的起始字节0x8b不符合UTF-8编码规则,因此触发解码错误。修正方案一:手动判断并解压压缩内容
import json import urllib.request import gzip with urllib.request.urlopen('https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json') as url: # 从响应头获取编码格式 content_encoding = url.info().get('Content-Encoding') if content_encoding == 'gzip': # 解压后解析JSON url_data = json.loads(gzip.decompress(url.read())) else: # 常规UTF-8解码解析 url_data = json.loads(url.read().decode()) print(url_data)
- 修正方案二:让urllib自动处理压缩(更简洁)
import json import urllib.request # 创建支持自动解压的opener opener = urllib.request.build_opener() opener.addheaders = [('Accept-Encoding', 'gzip, deflate')] urllib.request.install_opener(opener) with urllib.request.urlopen('https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json') as url: # 自动完成解压,直接读取解析JSON url_data = json.load(url) print(url_data)
内容的提问来源于stack exchange,提问作者user824624
相关产品推荐
相关产品推荐

