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解决字典中的值是列表问题的方法
Mar 04 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
python中的decorator的作用详解
Jul 26 Python
使用python进行拆分大文件的方法
Dec 10 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Python实战之制作天气查询软件
May 14 Python
django 模版关闭转义方式
May 14 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
python中常用的数据结构介绍
Jan 12 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/08/05 PHP
JavaScript 继承的实现
2009/07/09 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
python画图常规设置方式
2020/03/05 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
文员岗位职责范本
2014/03/08 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
环保证明
2015/06/23 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
JavaScript canvas实现流星特效
2021/05/20 Javascript