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 正则表达式 概述及常用字符
May 04 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python实现飞机大战小游戏
Nov 08 Python
使用python实现画AR模型时序图
Nov 20 Python
Python绘图实现显示中文
Dec 04 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python实现UDP协议下的文件传输
Mar 20 Python
Python学习之os模块及用法
Jun 03 Python
Python加速程序运行的方法
Jul 29 Python
Python实现石头剪刀布游戏
Jan 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
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
python检测远程udp端口是否打开的方法
2015/03/14 Python
python实现的希尔排序算法实例
2015/07/01 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
电子专业推荐信范文
2013/11/18 职场文书
财政专业求职信范文
2014/02/19 职场文书
金秋助学感谢信
2015/01/21 职场文书
介绍信模板
2015/01/31 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android