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 open读写文件实现脚本
Sep 06 Python
跟老齐学Python之再深点,更懂list
Sep 20 Python
python实现斐波那契数列的方法示例
Jan 12 Python
Python处理文本换行符实例代码
Feb 03 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
python for 循环获取index索引的方法
Feb 01 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
详解python播放音频的三种方法
Sep 23 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 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 Smarty模板生成html文档的方法
2010/04/12 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
常用DOM整理
2015/06/16 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
dpn网络的pytorch实现方式
2020/01/14 Python
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
What is view? why do we have view?
2012/06/22 面试题
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
小班下学期个人总结
2015/02/12 职场文书
导游词之广西漓江
2019/11/02 职场文书
python编写五子棋游戏
2021/05/25 Python
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
5道关于python基础 while循环练习题
2021/11/27 Python