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基础教程之Hello World!
Aug 29 Python
Python中endswith()函数的基本使用
Apr 07 Python
Python制作爬虫抓取美女图
Jan 20 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
django2 快速安装指南分享
Jan 05 Python
python使用Tesseract库识别验证
Mar 21 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 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
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
php写的AES加密解密类分享
2014/06/20 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Python实现时间序列可视化的方法
2019/08/06 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
烟台的海导游词
2015/02/02 职场文书
劳动模范获奖感言
2015/07/31 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
如何在python中实现ECDSA你知道吗
2021/11/23 Python