python gzip.open 显示utf-8无法解码_【issue 已解决】一次gzip导致的编码问题 | LiuYun的博客...

博主在尝试制作自动签到脚本时遇到响应乱码问题,起初认为是编码问题,尝试了UTF-8、GBK等解码方式未果。进一步研究发现是Python在接收到gzip编码的响应时自动解压导致的错误。通过删除'accept-encoding'中的gzip,避免了Python的错误判断,成功解决了乱码问题。
摘要由CSDN通过智能技术生成

前言

为了省去每日都要手动签到的麻烦,我想要做一个某机场的自动签到。综合分析下来,技术难度并不大,只是普通的两个request包,一个实现登录,一个实现签到即可,而且并无啥验证码或者sign验证等。

而当我尝试写完了所有代码,完事具备只欠东风时,却发现返回的结果莫名乱码了。

尝试

编码问题

既然出现了乱码,理所当然第一时间想到的就是response的解码出现了问题。于是我尝试手动设置为UTF-8解码,因为我看了下网页源码里有指明charset为UTF-8

rsp.encoding="utf-8"

结果出乎意料,我的问题并没有得到解决,返回的内容仍然是乱码状态。于是我又尝试了其他编码:gbk,gb2312等。结果都没有返回我想要的正确字符。

GZIP问题

注意到gzip是由于我将乱码的字符放到了搜索引擎,发现也曾有人提出过类似的问题,并且给出了gzip的相关内容,可惜涉及的不深,内容也比较少。于是我在了解到可能是gzip问题时就尝试自己发掘错误。

我观察了我的response-headers,发现其中正好有gzip'accept-encoding':'gzip, deflate, br', ,于是我猜测可能是python在进行解码时并未先对返回内容进行gizp解压,从而导致的乱码错误。

然后我就上网查阅了python相关的gzip调用解压,在response解码前先对其进行gzip解压。结果依然是乱码,到此我便陷入了深深的困惑,这个问题一直卡了我三四天。

解决方案

其实到了上面的gzip,我已经离答案非常解决了,可惜我错想了一步。我认为的是response本身已经gzip压缩了,但python没有解压。而实际情况则是response本身没有压缩,而python读取到headers里的gzip,自动为response进行了解压。结果就导致了上面出现了乱码。

最后的修改也很简单,只需要手动将accept-encoding中相关的gzip删除,以防止python的错误判断即可。

'accept-encoding':'deflate',

再次尝试,问题成功得到了解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值