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 相关文章推荐
开始着手第一个Django项目
Jul 15 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
Python threading的使用方法解析
Aug 28 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
pygame实现俄罗斯方块游戏(AI篇2)
Oct 29 Python
python3读取autocad图形文件.py实例
Jun 05 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
pytorch 使用半精度模型部署的操作
May 24 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
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
php+mysql数据库查询实例
2015/01/21 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python binascii 进制转换实例
2019/06/12 Python
Noon埃及:埃及在线购物
2019/11/26 全球购物
青年创业培训欢迎词
2014/01/08 职场文书
临床护士自荐信
2014/01/31 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
个人整改方案范文
2014/10/25 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers