我们经常发送请求给服务器,有时候返回的中文会出现乱码, 这就需要我们单独去处理了,那么我们在处理的时候, 一般会有哪些方法, 以及注意事项呢, 免得一不留神就踩了个坑.

解决响应体中文乱码的两个常用方法

第一, 直接对响应体整体转换编码.

1
2
3
response = requests.get(url, headers) #请求方法根据实际情况而定,不一定是get
response = response.encoding='utf-8'
response = response.text # 如果是图片,就用 .content, 自己视情况而定

但是这样有一个注意事项, 不要想着一步到位, 直接 response = response.encoding=’utf-8’.text 这样就会报错的, 因为这就涉及到了链式调用的问题, response = response.encoding=’utf-8’ 返回的并不是self 本身, 所以无法一步到位.

第二,把响应体里使用到的部分,转换成pycharm控制台可见的中文

有时候用了第一个整体转换的方法, 还是会在控制台上看到的是中文乱码, 这个时候就只能对我们使用到的部分进行转换后再使用.

1
obj.encode('iso-8859-1').decode('gbk')    

我们把需要转换的文字提取到一个对象里, 然后通过这个方法就可以把中文乱码给 解决了, 但这个方法只能对我们提取出的对象进行转换, 无法 对整个响应体进行转换, 切记.

这两个转换方法不能同时使用, 否则第二种局部转换运行的时候就会报错

我们不能在对全部响应体转换后, 再次对部分乱码进行转换, 否则第二种局部转换运行就会报错.
解决方法: 在整体转换后,发现控制台输出的还是乱码的时候, 就把这个整体转换给注释了, 就直接使用第二种局部转换的方法即可.
UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 0-8: ordinal not in range(256)
报错信息如上, 我还特意翻了CSDN都没找到原因, 最后才发现是两个转换方法一起使用就会报错的, 把第一个方法的那个整体转换注释了就OK 了.