Python3字符串encode与decode的讲解


Posted in Python onApril 02, 2019

大家好,很久没更新了,也是年底了最近比较忙,同时也在研究python的其他内容,毕竟是python小白,自学道路艰难。

好了今天和大家一起探讨下python3编码过程中对的一些转码事宜。

python3中对文本和二进制做了比较清晰的区分。python3默认编码为unicode,由str类型进行表示。二进制数据使用byte类型表示,所以不会将str和byte混在一起。在实际应用中我们经常需要将两者进行互转

有几点需要注意:

1:字符串通过编码转换为字节码,字节码通过解码转换为字符串

str--->(encode)--->bytes,bytes--->(decode)--->str

import sys
print('目前系统的编码为:',sys.getdefaultencoding())
name='小明'
print(type(name))#首先我们来打印下转码前的name类型,因为它是str,所以可以通过encode来进行编码
name1=name.encode('utf-8')
print(name1)

输出为:

目前系统的编码为: utf-8
<class 'str'>
b'\xe5\xb0\x8f\xe6\x98\x8e'

这里大家或许会有一个疑问,编码utf-8为什么不是decode转成unicode

因为开头跟大家讲过,python3默认就是unicode,utf-8可以看成是unicode的一个扩展集,所以其实name本身是一个unicode编码的,所以可以通过encode编码成utf-8,这里可以试下,如果认为name应该是utf-8,那我们来试下encode会不会报错

name1=name.decode('utf-8')
print(name1)
这里会报如下错误:
AttributeError: 'str' object has no attribute 'decode'

所以,对于python3默认的就是unicode编码。

既然已经encode成utf-8了,那我们来看下decode会出现什么样的结果

name2=name1.decode('utf-8')
print(type(name2))
print(name2)
这里要跟大家说下,decode()括号中为什么写utf-8,而不写gbk,可以这样理解,因为要解码,你总得告诉它我是什么编码的吧,比如我原先是utf-8格式的编码,现在要解码,但是如果冒充utf-8,说自己是gbk,那就会出现乱码,见下:
<class 'str'>
<class 'str'>
灏???

另外如果大家encode()和decode()括号中不写编码格式,系统会默认为utf-8,大家可以试下。

2:utf-8编码格式和gbk编码格式互转

既然知道utf-8编码与解码的规律,那我们来试试它与gbk之间的火花。

name1=name.encode('utf-8')
name2=name1.decode('utf-8')
name3=name2.encode('gbk')
name4=name3.decode('gbk')
print(type(name3))
print(name3)
下面是name3的结果
<class 'bytes'>
b'\xd0\xa1\xc3\xf7'
下面是name4的结果
<class 'str'>
小明

从上面可以卡出name2本来是解码成utf-8的,后来有队name2进行了gbk编码,接着又再次对name3进行gbk解码

所以不难看出,其实utf-8和gbk之间都是通过unicode来做一个中间转换的操作

在例子中

name2=name1.decode('utf-8')
name3=name2.encode('gbk')

这两步的操作就是通过unicode来转的

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python批量下载图片的三种方法
Apr 22 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
QML用PathView实现轮播图
Jun 03 Python
python dict乱码如何解决
Jun 07 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
PyTorch-GPU加速实例
Jun 23 Python
Python 如何调试程序崩溃错误
Aug 03 Python
pandas按条件筛选数据的实现
Feb 20 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
Pygame如何使用精灵和碰撞检测
Nov 17 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 #Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 #Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 #Python
windows下numpy下载与安装图文教程
Apr 02 #Python
python环境路径配置以及命令行运行脚本
Apr 02 #Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 #Python
python查询文件夹下excel的sheet名代码实例
Apr 02 #Python
You might like
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
初学Python实用技巧两则
2014/08/29 Python
使用python实现生成用户信息
2017/03/20 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
python实现取余操作的简单实例
2020/08/16 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
小学后勤管理制度
2014/01/14 职场文书
秋季运动会稿件
2014/01/30 职场文书
爱心捐款倡议书
2014/04/14 职场文书
期末评语大全
2014/05/04 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
2015年老干部工作总结
2015/04/23 职场文书
Python列表的索引与切片
2022/04/07 Python