引入gzip
from urllib import request
import gzip
r = request.urlopen(url)
content = r.read()
# 错误! --> UnicodeDecodeError:
# 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
# encoded_content = str(content, encoding='utf-8')
# 正解 √
encoded_content = gzip.decompress(content).decode("utf-8")
引起乱码的原因是因为目标网站,在HTTP协议中配置了Content-Encoding 字段,这个字段可以改变数据的压缩方法。
以下是目标网站,请求头的截图

本文探讨了解决从URL获取的数据在使用gzip解压时出现的UnicodeDecodeError问题。当目标网站使用Content-Encoding字段进行数据压缩时,直接使用utf-8解码会导致乱码。正确的做法是先用gzip.decompress()解压,再进行解码。
3792

被折叠的 条评论
为什么被折叠?



