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 05 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
基于Python os模块常用命令介绍
Nov 03 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
python 中yaml文件用法大全
Jul 04 Python
python_tkinter弹出对话框创建
Mar 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
YB217、YB235、YB400浅听
2021/03/02 无线电
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
javascript import css实例代码
2008/07/18 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
Python Grid使用和布局详解
2018/06/30 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
python利用platform模块获取系统信息
2020/10/09 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
团代会闭幕词
2015/01/28 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android