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中的socket模块使用代理实例
May 29 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
Python中random模块用法实例分析
May 19 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
Python堆排序原理与实现方法详解
May 11 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
Python高级特性与几种函数的讲解
Mar 08 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python中pickle模块浅析
Dec 29 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 中文字符串首字母的获取函数分享
2013/11/04 PHP
php查看当前Session的ID实例
2015/03/16 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python实现统计代码行数的方法
2015/05/22 Python
Python算术运算符实例详解
2017/05/31 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python实现学生信息管理系统
2020/04/05 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python循环结构的应用场景详解
2019/07/11 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
通过代码实例了解Python sys模块
2020/09/14 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
保险公司年会主持词
2014/03/22 职场文书
计生专干事迹
2014/05/28 职场文书
五四演讲稿范文
2014/09/03 职场文书
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL