引入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 字段,这个字段可以改变数据的压缩方法。