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 try异常处理机制
Jun 01 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
Jun 16 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
Python实现的求解最小公倍数算法示例
May 03 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Python之pymysql的使用小结
Jul 01 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 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
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP时间处理类操作示例
2018/09/05 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
使用python加密自己的密码
2015/08/04 Python
Python排序算法实例代码
2017/08/10 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
快速了解Python相对导入
2018/01/12 Python
使用Python读取大文件的方法
2018/02/11 Python
详解Python中where()函数的用法
2018/03/27 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Python socket服务常用操作代码实例
2020/06/22 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
2014司机年终工作总结
2014/12/05 职场文书
学校捐书活动总结
2015/05/08 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android