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小程序
Aug 15 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
python爬虫之百度API调用方法
Jun 11 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
python实现输入数字的连续加减方法
Jun 22 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
python 公共方法汇总解析
Sep 16 Python
python已协程方式处理任务实现过程
Dec 27 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
详解Flask开发技巧之异常处理
Jun 15 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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之第十天
2006/10/09 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python使用xpath实现图片爬取
2020/09/16 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
浪费资源的建议书
2014/03/12 职场文书
岳庙导游词
2015/02/04 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js