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 isinstance判断对象类型
Sep 06 Python
python爬取网站数据保存使用的方法
Nov 20 Python
python获取网页状态码示例
Mar 30 Python
Python实现的tab文件操作类分享
Nov 20 Python
Python IDLE清空窗口的实例
Jun 25 Python
Python实现八皇后问题示例代码
Dec 09 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
Python列表与元组的异同详解
Jul 02 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
Python之字典对象的几种创建方法
Sep 30 Python
Django基础CBV装饰器和中间件
Mar 22 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php Calender(日历)代码分享
2014/01/03 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
vue--vuex详解
2019/04/15 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
Python实现求数列和的方法示例
2018/01/12 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python 产生token及token验证的方法
2018/12/26 Python
python微信撤回监测代码
2019/04/29 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
详解Python 中的容器 collections
2020/08/17 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
妇产科护士自我鉴定
2013/10/15 职场文书
心理健康课教学反思
2014/02/13 职场文书
教师三严三实心得体会
2014/10/11 职场文书
惊天动地观后感
2015/06/10 职场文书
i7 6700处理器相当于i5几代
2022/04/19 数码科技