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实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
PyMongo安装使用笔记
Apr 27 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
小结Python的反射机制
Sep 28 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 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 cli换行示例
2014/04/22 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
PHP多维数组排序array详解
2017/11/21 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Python netmiko模块的使用
2020/02/14 Python
Python with语句用法原理详解
2020/07/03 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
世界上最好的帽子:Tilley
2016/11/27 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
刑事起诉书范文
2015/05/19 职场文书
歌舞青春观后感
2015/06/10 职场文书
小学英语教学反思范文
2016/02/15 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL