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使用win32com在百度空间插入html元素示例
Feb 20 Python
Python类定义和类继承详解
May 08 Python
在Python中使用成员运算符的示例
May 13 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
Python实现的建造者模式示例
Aug 06 Python
python进程和线程用法知识点总结
May 28 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
Python进行统计建模
Aug 10 Python
Django如何实现密码错误报错提醒
Sep 04 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
第九节--绑定
2006/11/16 PHP
php实现的MySQL通用查询程序
2007/03/11 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JS重要知识点小结
2011/11/06 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Python用SSH连接到网络设备
2021/02/18 Python
人力资源主管岗位职责
2014/01/29 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
文明餐桌活动方案
2014/02/11 职场文书
英语教学随笔感言
2014/02/20 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python