Python3中的保留字,Python3中的str类型没有decode方法
一、两种响应方式在使用python3的requests模块时,我发现有两种方式可以得到响应。
一是r.text响应内容,二是二进制响应内容。r.content在《Python学习手册》,解释如下。
Python 3。x有三种字符串对象类型——,一种用于文本数据,两种用于二进制数据:
Str Unicode text (8位及更宽)bytes表示二进制数据bytearray,它是一种可变字节类型 。也就是说,r.text实际上是Unicode的响应内容,而r.content是binary的响应内容。我们来看看源码是怎么解释的。
@属性
定义文本(自身):
“”以unicode表示的响应内容。
如果Response.encoding为None,将使用
“chardet”。
响应内容的编码仅基于HTTP来确定
头,严格遵循RFC 2616。如果你能利用
非HTTP知识为了更好地猜测编码,您应该
在访问此属性之前,请适当地设置“r.encoding”。
一般来说,r.text方法返回unicode编码的响应内容。响应的编码取决于HTTP消息的报头。如果您有HTTP之外的知识来猜测编码,您应该在访问该属性之前设置适当的r.encoding。也就是说,你可以使用r.encoding来改变编码,这样当你访问r.text时,请求将使用r.encoding的新值。
r编码
utf-8
让我们来看看r.content的源代码
@属性
定义内容(自身):
响应的内容,以字节为单位。r.content以字节为单位返回响应内容。
二。提出和解决问题当get请求与请求一起发送时,结果如下:
导入请求
url=xxx
params=xxx
cookie={ XXX : XXX }
res=requests.request(get ,url,params=params,cookies=cookies)
打印(研究文本)
那么,问题来了。是什么造成了unicode编码的字符串用\u表示?请参考知乎的相关回答,如何展现其真面目?
print(res.text.encode()。解码( unicode_escape ))
这个unicode_escape是什么?存储unicode的内存编码值,并且在读取文件时反向转换回来。这里采用了Unicode-escape。
当我们采用res.content时,也会遇到这个问题:
导入请求
url=xxx
params=xxx
cookie={ XXX : XXX }
res=requests.request(get ,url,params=params,cookies=cookies)
打印(内容)
解决方法是
print(RES . content . decode( unicode _ escape ))
三。总结1。str.encode()将字符串转换为原始字节形式
Bytes.decode()将原始字节转换为字符串形式。
2.当遇到类似的编码问题时,首先检查响应内容文本是什么类型。如果类型(文本)是字节,那么
Text.decode(unicode_escape )如果type(text)是str,那么
text.encode(latin-1 )。解码(“unicode_escape”)
参考https://www.zhihu.com/question/26921730
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。