现象
使用requests.get()请求,添加了header, 返回的数据使用了text接收;打印出来发现是乱码;
尝试解决
1、 设置encoding
ret = requests.get(url,headers=headers).text
ret.encoding = 'utf-8'
方法不生效;
2、利用apparent_encoding来自动判断返回值的编码格式,然后用返回的编码格式进行设置;
print(ret.apparent_encoding) #返回的编码
打印了一下,发现是None;
最后解决
搜索发现:造成乱码除了编码格式方面外,另外还有可能是因为压缩格式导致的。在请求头中,‘Accept-Encoding’是浏览器发给服务器,声明浏览器支持的编码类,一般有gzip,deflate,br 等等。很多网站都是以gzip的格式来输出页面,此时输出response.content和response.text时会自动解压,但是当以br格式压缩时,却不会自动解压;
Brotli是一种由 Google开发的全新压缩算法,可以有效减小传输内容大小,加速分发效果。当客户端的请求携带请求头 Accept-Encoding: br 时,表示客户端希望获取对应资源时进行 Brotli 压缩。当服务端响应携带响应头 Content-Encoding: br 时,表示服务端响应的内容是 Brotli 压缩的资源。需要注意的是,只有在 HTTPS 的情况下,浏览器才会发送 br 这个 Accept-Encoding;
检查header发现 请求头的Accept-Encoding中包含br;
删除Accept-Encoding后数据正常了