python3中的unicode_escape
一. 响应的两种方式
在使用python3的requests模块时,发现获取响应有两种方式
其一,为文本响应内容, r.text
其二,为二进制响应内容,r.content
在《Python学习手册》中,是这样解释的
'''Python 3.X带有3种字符串对象类型——一种用于文本数据,两种用于二进制数据:
str表示Unicode文本(8位的和更宽的)
bytes表示二进制数据
bytearray,是一种可变的bytes类型'''
也就是说,r.text实际上就是Unicode的响应内容,而r.content是二进制的响应内容,看看源码怎么解释
@property
def text(self):
"""Content of the response, in unicode.
If Response.encoding is None, encoding will be guessed using
``chardet``.
The encoding of the response content is determined based solely on HTTP
headers, following RFC 2616 to the letter. If you can take advantage of
non-HTTP knowledge to make a better guess at the encoding, you should
set ``r.encoding`` appropriately before accessing this property.
"""
大体的意思是说,r.text方法返回的是用unicode编码的响应内容。响应内容的编码取决于HTTP消息头,如果你有HTTP之外的知识来猜测编码,你应该在访问这个属性之前设置合适的r.encoding,也就是说,你可以用r.encoding来改变编码,这样当你访问r.text ,Request 都将会使用r.encoding的新值
>>> r.encoding 'utf-8' >>> r.encoding = 'ISO-8859-1'
我们看看r.content的源码
@property
def content(self):
"""Content of the response, in bytes."""
r.content返回的是字节形式的响应内容
二. 问题的提出与解决
当用requests发送一个get请求时,得到的结果如下:
import requests
url = "xxx"
params = "xxx"
cookies = {"xxx": "xxx"}
res = requests.request("get", url, params=params, cookies=cookies)
print(res.text)

那么,问题来了,\u表示的那一串unicode编码,它是什么原因造成的,请参考知乎相关回答,该如何呈现它的庐山真面目?
print(res.text.encode().decode("unicode_escape"))

这个unicode_escape是什么?将unicode的内存编码值进行存储,读取文件时在反向转换回来。这里就采用了unicode-escape的方式
当我们采用res.content时,也会遇到这个问题:
import requests
url = "xxx"
params = "xxx"
cookies = {"xxx": "xxx"}
res = requests.request("get", url, params=params, cookies=cookies)
print(res.content)

解决的办法就是
print(res.content.decode("unicode_escape"))

三. 总结
1. str.encode() 把一个字符串转换为其raw bytes形式
bytes.decode() 把raw bytes转换为其字符串形式
2. 遇到类似的编码问题时,先检查响应内容text是什么类型,如果type(text) is bytes,那么
text.decode('unicode_escape')
如果type(text) is str,那么
python3中的unicode_escape的更多相关文章
- Python3 中bytes数据类型深入理解(ASCII码对照表)
bytes的来源 bytes 是 Python 3.x 新增的类型,在 Python 2.x 中是不存在的. bytes 的意思是"字节",以字节为单位存储数据.而一个字节二进制为 ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- Python3中使用PyMySQL连接Mysql
Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...
- python3 中mlpy模块安装 出现 failed with error code 1的决绝办法(其他模块也可用本方法)
在python3 中安装其它模块时经常出现 failed with error code 1等状况,使的安装无法进行.而解决这个问题又非常麻烦. 接下来以mlpy为例,介绍一种解决此类安装问题的办法. ...
- python3中返回字典的键
我在看<父与子的编程之旅>的时候,有段代码是随机画100个矩形,矩形的大小,线条的粗细,颜色都是随机的,代码如下, import pygame,sys,random from pygame ...
- python3中的zip
在 python2 中zip可以将两个列表并入一个元组列表,如: a = [1,2,3,4] b = [5,6,7,8] c = zip(a,b) 结果:c [(1,5),(2,6),(3,7),(4 ...
- python3中输出不换行
python2中输出默认是换行的,为了抑制换行,是这么做的: print x, 到了python3中,print变成一个函数,这种语法便行不通了.用2to3工具转换了下,变成这样了: print(x, ...
- Python3中的新特性(3)——代码迁移与2to3
1.将代码移植到Python2.6 建议任何要将代码移植到Python3的用户首先将代码移植到Python2.6.Python2.6不仅与Python2.5向后兼容,而且支持Python3中的部分新特 ...
- Python3中的新特性(1)——新的语言特性
1.源代码编码和标识符 Python3假定源代码使用UTF-8编码.另外,关于标识符中哪些字符是合法的规则也放宽了.特别是,标识符可以包含代码点为U+0080及以上的任意有效Unico ...
随机推荐
- speech sdk 文字转语音
1.下载SDK包 https://www.microsoft.com/en-us/download/details.aspx?id=10121 2.直接上代码 // SpeechRecognition ...
- 设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)
思想:图G是不带权的无向连通图.一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地 ...
- App的开发过程
不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开发过程主要分为以下阶段,本文会按顺序为大家简单地说明: 1.需求梳理.分析 2.产品原型图绘制 3.U ...
- 我的第四个Python小程序
简单的登陆程序: # Author: fansik # Description: Simply log in to small programs # Date: 2017/9/29 _username ...
- sharepoint 2010自定义访问日志列表设置移动终端否和客户端访问系统等计算列的公式
上个月本人开发和上线了一个在SharePoint 2010上基于HTML5的移动OA网站,后端服务采用自定义的基于AgilePoint工作流引擎的Sharepoint Web服务,前端主要采用Jque ...
- offsetLeft与style.left的区别
参考:http://www.cnblogs.com/woshilee/articles/1951457.html offsetLeft 获取的是相对于父对象的左边距 left 获取或设置相对于 具有定 ...
- 留言处插入xss不弹框
对于新手来说,往往会在留言地方插入<script>alert(1)</script>来检测是否有存储xss,事实是基本上不会弹框的,为啥? 通过查看源码,可知道<> ...
- arcgis for flex map遮罩
效果1:map的遮罩(对整个map进行遮罩) 效果2:对某个图层进行遮罩
- eclipse新建自定义EL函数
==================================================================================================== ...
- [POI2008]砖块Klo
题目 爆炸\(OJ\)机子太慢了吧实在不想打平衡树了 做法 烂大街的一个概念:求中位数 然后求前缀差和后缀差,主席树模板题 注意\(int\)和\(long long\) My complete co ...