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搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
python 调用c语言函数的方法
Sep 29 Python
python3连接MySQL数据库实例详解
May 24 Python
Python中if elif else及缩进的使用简述
May 31 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
详解python分布式进程
Oct 08 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
python使用turtle库绘制奥运五环
Feb 24 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
Python数据结构之队列详解
Mar 21 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/10/09 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JS常用算法实现代码
2016/11/14 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
详解angular中的作用域及继承
2017/05/31 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
车间核算员岗位职责
2014/07/01 职场文书
单位工作证明
2014/10/07 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
团委副书记工作总结
2015/08/14 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
协议书格式模板
2016/03/24 职场文书