守护麦田  

python 中的requests库,进行请求,发现一直使用的 r.text ,返回的内容,看不懂。如下图所示:

 

 经查阅资料,发现 requests库 ,r.text返回的是decode处理后的Unicode型的数据,r.content 返回的是bytes 二进制的原始数据。如果headers 没有charset字符集指定的编码方式,r.text 会调用chardet 来计算字符集。

查看response的headers,如下:

 

而标准的response响应,是返回如下:

 

HTTP权威指南中,显示

如果HTTP响应中Content-Type字段没有指定charset,则默认页面是'ISO-8859-1'编码。

这种处理英文没问题,一遇到中文,就会出现乱码。

解决:

1.清楚 该站的字符集编码,可以使用r.encoding='xxx'模式,然后再r.text()会根据设定的字符集进行转换后输出。

返回中文应该可以正常查看。代码如下:

 r.encoding='utf-8'           

print(r.text), 

 

 

 

 2. fiddler抓包,显示response已经 encoded了,让decode 

 

 请求后的响应response,先获取bytes 二进制类型数据,再指定encoding,即可。

如:

bytes=r.content  

print(bytes.decode(encoding="utf-8"))   

3.使用apparent_encoding可获取程序真实编码

r.encoding = r.apparent_encoding

print(r.text)

也可以正常查看response中的 中文。

此文,记录一下自己学习过程中遇到的坑。 详细更多资料,可查看下面 两篇文章,看后清楚很多。

 

查阅资料链接:

http://xiaorui.cc/archives/2786

https://www.cnblogs.com/bitpeng/p/4748872.html

posted on   守护麦田  阅读(7649)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
 
点击右上角即可分享
微信分享提示