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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
Python程序设计入门(1)基本语法简介
Jun 13 Python
跟老齐学Python之从if开始语句的征程
Sep 14 Python
跟老齐学Python之字典,你还记得吗?
Sep 20 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
python实现基于SVM手写数字识别功能
May 27 Python
基于python实现学生管理系统
Oct 17 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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
10款实用的PHP开源工具
2015/10/23 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
详谈js模块化规范
2017/07/07 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
Python图像处理之简单画板实现方法示例
2018/08/30 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
Django stark组件使用及原理详解
2019/08/22 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
如何在python中实现随机选择
2019/11/02 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python适合做数据挖掘吗
2020/06/16 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
文员自我评价怎么写
2013/09/19 职场文书
普通员工辞职信
2014/01/17 职场文书
企业管理培训感言
2014/01/27 职场文书
期末个人总结范文
2015/02/13 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript