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的几种开发工具介绍
Mar 07 Python
Python内置函数bin() oct()等实现进制转换
Dec 30 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
python修改txt文件中的某一项方法
Dec 29 Python
Python交互式图形编程的实现
Jul 25 Python
在pycharm中显示python画的图方法
Aug 31 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python文件操作基础流程解析
Mar 19 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
python 高阶函数简单介绍
Feb 19 Python
如何利用Python实现一个论文降重工具
Jul 09 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
详解python的ORM中Pony用法
2018/02/09 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
一套PHP的笔试题
2013/05/31 面试题
会计毕业自我鉴定
2014/02/05 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
班级管理经验交流材料
2015/11/02 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
导游词之太湖
2019/10/08 职场文书