文档章节

Requests 库编码问题及引出的 Python 编码问题

xh4n3
 xh4n3
发布于 2015/08/12 17:11
字数 566
阅读 140
收藏 0

Requests 编码

在使用 requests 访问微信接口的时候,requests 只根据 http headers 的信息来设置编码集,文档如下:

response.text()
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.

这边就是说,我们的选择还有,当服务器不指定编码集时,使用以下方式指定编码,然后再将 text 输出,输出的为 unicode。

r.encoding = 'utf-8'
r.text

关于这个的话题的讨论可以看这里。 当我们使用urllib2.urlopen('http://www.baidu.com').read()时,返回的则是 str 格式。

Python 2 编码问题

# Python 2 默认赋值时为字节串即 str 类型,此处的哈哈经过 utf-8 编码以后变成了 \xe5\x93\x88\xe5\x93\x88,此时 len(x) == 6
>>> x="哈哈"
>>> x
'\xe5\x93\x88\xe5\x93\x88'
>>> type(x)
<type 'str'>
# 由于储存哈哈到 str 类型时经过了 utf-8 编码,所以要想获得哈哈,就必须通过解码,解码后得到 unicode 类型的字符串
>>> x.decode('utf-8')
u'\u54c8\u54c8'
# 呵呵在储存的时候 u 指定了它是 unicode 类型,所以变量 y 是真正意义上的字符串,我们可以通过 encode 操作将它转换为 str 类型
>>> y=u"呵呵"
>>> y
u'\u5475\u5475'
>>> type(y)
<type 'unicode'>
>>> y.encode('utf-8')
'\xe5\x91\xb5\xe5\x91\xb5'
>>> type(y.encode('utf-8'))
<type 'str'>

Python 3 编码问题

>>> x='哈哈'
# Python 3 中的 str 类型储存的其实是 Python 2 中的 unicode 字符串,即是真正意义上的字符串
>>> type(x)
<class 'str'>
# 通过 Python 2 一样的方法,我们可以将一个 unicode 转换为一个 bytes 字节串,这里 bytes 其实就是 Python 2 中的 str 类型。
>>> y = x.encode('utf=8')
>>> y
b'\xe5\x93\x88\xe5\x93\x88'
>>> type(y)
<class 'bytes'>
>>>

总结

  • Python 2 中 str 和 Python 3 中 bytes 是一个东西
  • Python 2 中 unicode 和 Python 3 中 str 是一个东西
  • 字符串编码后得到字节串,字节串解码后得到字符串
  • 打开文件使用 codecs.open() 可以指定编码格式

© 著作权归作者所有

共有 人打赏支持
xh4n3
粉丝 14
博文 28
码字总数 16847
作品 0
杭州
程序员
私信 提问
Requests v2.12.5,Python 的 HTTP 客户端库

Requests v2.12.5 发布了。Requests 是一个 Python 的 HTTP 客户端库。 更新内容: 修复了 JSON 编码检测的问题,特别是用 BOM 检测大端 UTF-32 更新日志 下载地址 Source code (zip) Source...

局长
2017/01/19
707
0
Requests 2.18.3 发布,Python 的 HTTP 客户端库

Requests 是一个“非转基因”的 Python HTTP 库,人类可以安全享用。允许你发送“纯天然”、“植物饲养”的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 PO...

王练
2017/08/04
620
3
爬取小说(步骤一)python

假设各位老哥已经安装好了bs4 requests这些库了 这个小说是随便挑的,各位也就不用太介意(仅供各位学习) python3 实现,网上用python2做爬虫的太多了,但用python3的还是比较少 爬取的链接...

肥宅_Sean
2018/01/13
0
0
[雪峰磁针石博客]python工具库介绍-requests:人性化的HTTP

Requests是Python基于Apache2 Licensed许可证的人性化HTTP库。 Python标准库中urllib2提供了不少HTTP 功能,但API不系统。它有点过时,完成最简单的任务也需要大量工作。 下面我们用实例演示...

书籍寻找
2018/10/15
0
0
python的requests库和urllib包对比

python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了...

yzy121403725
2018/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
28分钟前
3
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
40分钟前
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
40分钟前
1
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
49分钟前
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
51分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部