Python每天必学之bytes字节


Posted in Python onJanuary 28, 2016

Python中的字节码用b'xxx'的形式表示。x可以用字符表示,也可以用ASCII编码形式\xnn表示,nn从00-ff(十六进制)共256种字符。

一、基本操作

下面列举一下字节的基本操作,可以看出来它和字符串还是非常相近的:

In[40]: b = b"abcd\x64"
In[41]: b
Out[41]: b'abcdd'
In[42]: type(b)
Out[42]: bytes
In[43]: len(b)
Out[43]: 5
In[44]: b[4]
Out[44]: 100 # 100用十六进制表示就是\x64

如果想要修改一个字节串中的某个字节,不能够直接修改,需要将其转化为bytearray后再进行修改:

In[46]: barr = bytearray(b)
In[47]: type(barr)
Out[47]: bytearray
In[48]: barr[0] = 110
In[49]: barr
Out[49]: bytearray(b'nbcdd')

二、字节与字符的关系

上面也提到字节跟字符很相近,其实它们是可以相互转化的。字节通过某种编码形式就可以转化为相应的字符。字节通过encode()方法传入编码方式就可以转化为字符,而字符通过decode()方法就可以转化为字节:

In[50]: s = "人生苦短,我用Python"
In[51]: b = s.encode('utf-8')
In[52]: b
Out[52]: b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python'
In[53]: c = s.encode('gb18030')
In[54]: c
Out[54]: b'\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xd3\xc3Python'
In[55]: b.decode('utf-8')
Out[55]: '人生苦短,我用Python'
In[56]: c.decode('gb18030')
Out[56]: '人生苦短,我用Python'
In[57]: c.decode('utf-8')
Traceback (most recent call last):
 exec(code_obj, self.user_global_ns, self.user_ns)
 File "<ipython-input-57-8b50aa70bce9>", line 1, in <module>
 c.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte
In[58]: b.decode('gb18030')
Out[58]: '浜虹???︾???????ython'

我们可以看到用不同的编码方式解析出来的字符和字节的方式是完全不同,如果编码和解码用了不同的编码方式,就会产生乱码,甚至转换失败。因为每种编码方式包含的字节种类数目不同,如上例中的\xc8就超出了utf-8的最大字符。

三、应用

举个最简单的例子,我要爬取一个网页的内容,现在来爬取用百度搜索Python时返回的页面,百度用的是utf-8编码格式,如果不对返回结果解码,那它就是一个超级长的字节串。而进行正确解码后就可以显示一个正常的html页面。

import urllib.request

url = "http://www.baidu.com/s?ie=utf-8&wd=python"
page = urllib.request.urlopen(url)
mybytes = page.read()
encoding = "utf-8"
print(mybytes.decode(encoding))
page.close()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

Python 相关文章推荐
python生成器的使用方法
Nov 21 Python
使用python实现strcmp函数功能示例
Mar 25 Python
十个Python程序员易犯的错误
Dec 15 Python
全面理解Python中self的用法
Jun 04 Python
Python使用getpass库读取密码的示例
Oct 10 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Python高斯消除矩阵
Jan 02 Python
django的settings中设置中文支持的实现
Apr 28 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
Python装饰器入门学习教程(九步学习)
Jan 28 #Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 #Python
使用Python写个小监控
Jan 27 #Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 #Python
Python图像灰度变换及图像数组操作
Jan 27 #Python
让python在hadoop上跑起来
Jan 27 #Python
CentOS安装pillow报错的解决方法
Jan 27 #Python
You might like
php 信息采集程序代码
2009/03/17 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php验证码实现代码(3种)
2015/09/07 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
小程序实现多选框功能
2018/10/30 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
教师对照四风自我剖析材料
2014/09/30 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
撤诉书怎么写
2015/05/19 职场文书
婚宴祝酒词大全
2015/08/10 职场文书