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程序设计入门(4)模块和包
Jun 16 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
anaconda中更改python版本的方法步骤
Jul 14 Python
python实现邮件自动发送
Aug 10 Python
python定位xpath 节点位置的方法
Aug 27 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
Python用来做Web开发的优势有哪些
Aug 05 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
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
zookeeper python接口实例详解
2018/01/18 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
捐款倡议书怎么写
2014/05/13 职场文书
高三霸气励志标语
2014/06/24 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
督导岗位职责
2015/02/04 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
Python面向对象编程之类的概念
2021/11/01 Python
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android