http请求响应乱码

http请求响应乱码

问题

HTTP请求响应中的encoding为ISO-8859-1

内容乱码{"ChnName":"李光湛"}

解决

# coding=utf-8
import requests

url = "https://..." # 换成自己的目标网址
r = requests.get( url )
r.encoding = 'utf-8' # 将ISO-8859-1编码格式转换为UTF-8格式
print r.text # 这时输出就没有中文乱码问题啦

requests库中的utils模块中其实已经准备了get_encodings_from_content方法,该方法的功能是从返回的内容中获取页面的编码格式;另外查看返回对象的apprent_encoding也可以查看页面的真正的编码格式。综合两种方法,写一个函数来获取返回对象的text属性。如下所示,可更加完美地解决ISO-8859-1中文乱码问题:

# coding=utf-8
import requests

def get_text( r ):
    if r.encoding == 'ISO-8859-1':
        true_encoding = requests.utils.get_encodings_from_content( r.text )
        if true_encoding:
            true_encoding = true_encoding[0]
        else:
            true_encoding = r.apparent_encoding
        # 根据真正的编码格式对内容进行解码
        true_text = r.content.decode(true_encoding, 'replace')
    else:
        true_text = r.text
    return true_text

if __name__ == "__main__":
    url = "https://..." # 换成自己的目标网址
    r = requests.get( url )
    print get_text( r ) # 这时输出就没有中文乱码问题啦

参考

https://www.zhuanfou.com/ask/78429906_783

本文作者:朝圣

本文链接:www.zh-noone.cn/2020/12/http请求响应乱码

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

RSA_PKCS1加解密
0 条评论