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获取文件扩展名的方法
Jul 06 Python
bpython 功能强大的Python shell
Feb 16 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python3中列表list合并的四种方法
Apr 19 Python
python实现文件的备份流程详解
Jun 18 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
python中必要的名词解释
Nov 20 Python
使用python绘制二维图形示例
Nov 22 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
python用opencv 图像傅里叶变换
Jan 04 Python
Python turtle实现贪吃蛇游戏
Jun 18 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
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
PHP eval函数使用介绍
2013/12/08 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
JS实现简单日历特效
2020/01/03 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
总结python实现父类调用两种方法的不同
2017/01/15 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python文件读写代码实例
2019/10/21 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
如何在sublime编辑器中安装python
2020/05/20 Python
Python可以用来做什么
2020/11/23 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
11月红领巾广播稿
2014/01/17 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
茶花女读书笔记
2015/06/29 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
python - asyncio异步编程
2021/04/06 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL
Java实现注册登录跳转
2022/06/16 Java/Android
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript