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实现在目录中查找指定文件的方法
Nov 11 Python
Python Requests安装与简单运用
Apr 07 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
python实现简单flappy bird
Dec 24 Python
python同时替换多个字符串方法示例
Sep 17 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
Python实现曲线拟合的最小二乘法
Feb 19 Python
python APScheduler执行定时任务介绍
Apr 19 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判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
php计算年龄精准到年月日
2015/11/17 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
实例解析php的数据类型
2018/10/24 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python分支结构(switch)操作简介
2018/01/17 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python安装gdal的两种方法
2019/10/29 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
python 下载文件的多种方法汇总
2020/11/17 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
通用C#笔试题附答案
2016/11/26 面试题
企业厂务公开实施方案
2014/03/26 职场文书
生活小常识广播稿
2014/09/16 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
党员证明信
2015/06/19 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL