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 08 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
python MySQLdb使用教程详解
Mar 20 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
详解python数据结构和算法
Apr 18 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
Python hashlib模块加密过程解析
Nov 05 Python
Softmax函数原理及Python实现过程解析
May 22 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
Python实现科学占卜 让视频自动打码
Apr 09 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
MySQL相关说明
2007/01/15 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php类的定义与继承用法实例
2015/07/07 PHP
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python实现简单的学生管理系统
2021/02/22 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
zooplus意大利:在线宠物商店
2019/08/07 全球购物
财务内勤岗位职责
2014/04/17 职场文书
社团活动总结
2014/04/28 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
接待员岗位职责范本
2015/04/15 职场文书
校运会通讯稿
2015/07/18 职场文书
公司人事管理制度
2015/08/05 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
mysql的数据压缩性能对比详情
2021/11/07 MySQL