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通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
python套接字流重定向实例汇总
Mar 03 Python
Python编程之序列操作实例详解
Jul 22 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python requests.post带head和body的实例
Jan 02 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
python实现自动打卡的示例代码
Oct 10 Python
Pyecharts 中Geo函数常用参数的用法说明
Feb 01 Python
如何在Python项目中引入日志
May 31 Python
七个非常实用的Python工具包总结
Jun 15 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
PHP积分兑换接口实例
2015/02/09 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
php实现映射操作实例详解
2019/10/02 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
通过Pandas读取大文件的实例
2018/06/07 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python读写csv文件方法详细总结
2019/07/05 Python
python 自定义装饰器实例详解
2019/07/20 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
浅析NumPy 切片和索引
2020/09/02 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
培训讲师岗位职责
2014/04/13 职场文书
作文评语大全
2014/04/23 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
Java异常处理try catch的基本用法
2021/12/06 Java/Android
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python