使用Python解压请求Payload时遇UnicodeDecodeError问题求助
问题原因
你base64解码后的字节流并非原始JSON字符串,而是经过gzip压缩的数据——字节0x8b是gzip压缩格式的标志性字节之一(gzip文件头固定为0x1f 0x8b)。直接用json.loads()解析压缩字节会触发编码错误,因为json.loads()默认会尝试将字节按utf-8解码为字符串,但压缩数据不属于合法的utf-8编码内容。
解决方法
先对base64解码后的字节执行gzip解压,再将解压后的字节转为utf-8字符串,最后用json.loads()解析为字典。
代码示例1:使用gzip.decompress快速解压
import base64 import gzip import json # 替换为你的实际payload字符串 payload = "你的编码字符串" payload_in_bytes = base64.b64decode(payload) # 解压gzip数据 decompressed_bytes = gzip.decompress(payload_in_bytes) # 解码为字符串后解析JSON payload_dict = json.loads(decompressed_bytes.decode('utf-8'))
代码示例2:使用GzipFile处理大文件/数据流
如果payload对应的压缩数据较大,推荐用流式解压的方式:
import base64 import gzip import json from io import BytesIO payload = "你的编码字符串" payload_in_bytes = base64.b64decode(payload) with gzip.GzipFile(fileobj=BytesIO(payload_in_bytes), mode='rb') as f: decompressed_bytes = f.read() payload_dict = json.loads(decompressed_bytes.decode('utf-8'))
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

