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 09 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
Python 实现选择排序的算法步骤
Apr 22 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
Python中断多重循环的思路总结
Oct 04 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
python实现取余操作的简单实例
Aug 16 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 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用mysql数据库存储session的代码
2010/03/05 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
JS常用知识点整理
2017/01/21 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
python中int与str互转方法
2018/07/02 Python
python 接收处理外带的参数方法
2018/12/03 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
python 内置函数汇总详解
2019/09/16 Python
在python中修改.properties文件的操作
2020/04/08 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
中专毕业生求职简历的自我评价
2013/10/21 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
解析Java异步之call future
2021/06/14 Java/Android
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python