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 ) # 这时输出就没有中文乱码问题啦