Python_关于python2的encode(编码)和decode(解码)的使用

软件测试|深入理解Python的encode()和decode()方法 在Python中,字符串是不可变的序列对象,它由Unicode字符组成。encode()和decode()。这两个方法允许我们在Unicode字符和字节之间进行相互转换,以便在处理文本和二进制数据时更加灵活。在本文中,我们将深入探讨Python中的encode()和decode()方法,并了解它们的用法和注意事项。Python的encode()和decode()方法提供了在Unicode字符串和字节序列之间进行转换的重要功能。这两个方法允许我们在处理文本和二进制数据时更加灵活。 阅读详情

目录

python执行过程的编解码

encode&decode

中文乱码解决方法

常见问题

格式化带有中文的字符串报错

带有中文的字符串反转后乱码


在使用Python2时,我们习惯于在文件开头声明编码

# coding: utf-8

不然在文件中出现中文,运行时就会报错 SyntaxError: Non-ASCII character... 之类,这是因为python2的文件编码默认使用的ascii,ascii码是不支持中文的。

如果在开头声明了编码,文件编码就会变为utf-8。

python执行过程的编解码

python使用的unicode类型作为编码的基础类型,默认情况下,python在执行文件过程中的编解码为 str-->unicode-->str,当我们在python开头声明utf-8编码后,编解码就变为了  str-->ascii-->str

举个简单例子,就可以验证这个现象。

# coding:utf-8
s = "我要学Python"
print(1, s)

 从打印结果可以看出,我们没有做任何处理,中文在执行过程就被处理成了ascii码

encode&decode

在了解了Python执行过程的编码转换后,那我们自己如果转换编码该如何实现呢?这里就得使用两个内置方法 encode编码和decode解码。

例如:

# coding:utf-8
s = "我要学Python"
s.encode("utf-8")   # 编码
s.decode("utf-8")   # 解码

上面是方法的简单运用,但是执行上面代码,第3行就会出现编解码过程中常见的一个报错

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

简单分析下,明明执行的encode方法,为什么会抛decode错误呢?这就要从上面介绍的python执行过程来分析了。

在执行encode方法编码时,python先要解码,而Python解码默认用unicode格式,而文件开头指定的编码格式为ascii,这就导致编码格式与解码格式不一致,从而产生了报错 ascii 不能解码成 unicode。

要解决这个问题,只需要在编码前,用utf-8格式解码就可以了

s = "我要学Python"
s.decode("utf-8").encode("utf-8")   # 编码
s.decode("utf-8")   # 解码

中文乱码解决方法

在了解编解码过程后,我们来解决实际遇到的问题:接口响应中文乱码!

比如:在接口测试中,有些响应类似 "\u9875\u9762\u4e0d\u5b58\u5728" 的响应内容,看起来就像乱码

注意看乱码前面有个u ,这表示使用的unicode编码字符。可用以下方法进行解码:

# 直接在 unicode 字符串前加u  ===> 使用Python机制自动解码
s = u"\u9875\u9762\u4e0d\u5b58\u5728"
print(s)   # 打印:页面不存在。因为字符串为unicode编码格式,python在执行过程中,默认就是使用的unicode解码,编解码类型一致,就看到了中文打印内容

# 使用 decode 方法解码成中文 ===> 主动解码
s = "\u9875\u9762\u4e0d\u5b58\u5728"
print(s.decode("unicode_escape"))

常见问题

格式化带有中文的字符串报错

格式拼接的字符串包含中文,会抛错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

# coding:utf-8

s = "\u9875\u9762\u4e0d\u5b58\u5728"

# 拼接的字符串 不包含 中文字符===>正常
print("result: %s" % s.decode("unicode_escape"))

# 拼接的字符串 包含 中文字符串===>异常
print("结果: %s" % s.decode("unicode_escape"))

问题分析:

解决方法:

统一编码格式

# coding:utf-8

s = "\u9875\u9762\u4e0d\u5b58\u5728"

# 方法1:将右边变为 ascii 编码
print("结果:%s" % s.decode("unicode_escape").encode("utf-8"))

# 方法2:将左边变为 unicode 编码
print(u"结果:%s" % s.decode("unicode_escape"))

带有中文的字符串反转后乱码

带有中文的字符串使用列表反转方式后乱码,使用decode("utf-8") 解码,报错:UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 0: invalid start byte

# coding:utf-8

s = "qta_baseline_test_勿删"[::-1]
print(s)
print(s.decode("utf-8"))

 问题分析:

中文被Python解析后,先转换成ascii码

 当使用列表反转方式后,实际把ascii反转

 这就导致了反转后的乱码无法被decode("utf-8")正常解码

解决方法:

因为采用的utf-8编码,所以先使用utf-8解码,解码后再反转

# coding:utf-8

s = "qta_baseline_test_勿删"[::-1]
print(s)

s = "qta_baseline_test_勿删".decode("utf-8")[::-1]
print(s)
s = s.encode("utf-8")       # 为了后续字符串能正常使用,建议在按原编码方式编码
print(s)


-事必有法,然后有成- 最后祝大家早日达到测试的天花板!



 以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

python中encode()和decode()函数以及常见的UTF-8编码 阅读详情

相关推荐

Python2.7 编码与解码理解

Python 网络编程

Jeffery_Gong的博客 3531

字符串的encode与decode解决乱码问题

转自:http://www.weidianyuedu.com/content/0614485921201.html 为什么会报错“UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题。 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decod

xiaoyaozi2020的博客 2409

Python中编码【encode】解码【decode】讲解

编码和解码,其实就是str与bytes的相互转化的过程(Python 2已经远去,这里以及后面都只用Python 3举例)所有的字符,在unicode字符集中都有对应的编码值(code point)而在Python 3中,默认使用的是uft-8来读取,所以省了不少的事。就是我们说的编码方式,常见的有:UTF-8,GB2312等。你会看到有一个confidence字段,其表示预测的可信度,在Python 2中,默认使用的是ASCII编码来读取的,也就是说,当我们要将内存中的字符串持久化到硬盘中的时候,

m0_74872863的博客 792

python的encode()和decode()的用法及实例

很多时候我们读取数据容易看到的是乱码,因为编写这个文件的人为了存储、私密保存等原因会用utf-8、gbk、ASCII等进行编码。编码我们可以用encode方法,解码我们可以用decode方法。目录1.encode函数的用法及实例(1)encode()的语法(2)用法:将目标字符串str编写为目标二进制数据bytes类型,即为编码过程。(3)实例①转为目标bytes类型②查看返回类型2.decode函数的用法及实例(1)decode()的语法(2)用法:将目标二进制数据bytes转为目标字符串str类型,即为

weixin_50853979的博客 3万+

Python中字符串的encode方法详解

通过encode方法,我们可以方便地将字符串转换为指定编码的字节序列。在实际应用中,我们需要根据具体的需求选择合适的编码格式和错误处理方式。使用encode方法可以确保字符串在不同编码之间的正确转换,从而有效地处理文本数据。

带你成为别人眼中的大佬! 1002

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

python的decode函数报错_python2和python3的编码encode解码decode函数

python比较坑的一个点;意义完全变了的两个函数首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化Unicode:包括了所有可能字符的国际统一编码GBK:中文的一种编码标准,包括中文和英文在python2中 解码函数decode是 其他编码(utf-8或GBK或其他)——>Unicode编码 用法:u=str.decode('utf-8') 括...

weixin_39915700的博客 449

YOLOv5+Astra Pro Plus深度相机:手把手教你实现实时目标检测(附ROS配置技巧)

本文详细介绍了如何将YOLOv5目标检测算法与Astra Pro Plus深度相机结合,构建实时目标检测系统。内容涵盖从硬件选型、环境搭建、ROS配置到YOLOv5部署与深度信息融合的完整流程,并分享了性能优化、避障算法等实战技巧,帮助开发者在机器人视觉等场景中快速实现智能感知应用。

weixin_28292761的博客 386

python2和python3的编码encode解码decode函数

python比较坑的一个点;意义完全变了的两个函数 首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化 Unicode:包括了所有可能字符的国际统一编码 GBK:中文的一...

weixin_30855761的博客 412

11. TI MSPM0G3507 DMA传输实战:ADC数据自动搬运与电压采集

本文以TI MSPM0G3507为例,详细讲解了如何利用DMA(直接存储器访问)实现ADC数据的自动搬运与电压采集。通过实战演示,解放CPU资源,提升系统实时性与效率,适用于电赛备赛及嵌入式开发中的数据采集场景。

weixin_42465140的博客 131

OBS直播美颜全攻略:从插件下载到参数调校一站式指南

本文提供OBS直播美颜插件从下载安装到参数调校的一站式指南。详细介绍了如何安全获取并安装OBS美颜插件,重点讲解了在OBS中添加美颜滤镜的核心步骤,并分享了磨皮、肤色调整、细节增强等关键参数的实战调校技巧,帮助主播打造自然、专业的直播形象。

weixin_29197835的博客 324

python解码函数_python2和python3的编码encode解码decode函数

python比较坑的一个点;意义完全变了的两个函数首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化Unicode:包括了所有可能字符的国际统一编码GBK:中文的一种编码标准,包括中文和英文在python2中 解码函数decode是 其他编码(utf-8或GBK或其他)——>Unicode编码 用法:u=str.decode('utf-8') 括...

weixin_39601794的博客 261

4G LTE 与 5G 无线网络规划对比:从 BBU/RRU 到 CU/DU/AAU 的架构演进解析

本文深度解析4G LTE与5G无线网络架构的演进差异,从BBU/RRU分立式架构到CU/DU/AAU三级重构,揭示移动通信代际跃迁的技术本质。重点对比了网络规划中的覆盖能力、容量规划、传输网络等九大维度,为通信工程师提供实用的技术对照手册,助力5G网络高效部署。

weixin_32821533的博客 287

python字符编码使用ascii编码_Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: 'ascii' codec can't decode/encode...

Python中文虐我千百遍,我待Python如初恋。本文主要介绍在Python2/3交互模式下,通过对中文、英文的处理输出,理解Python的字符编码与解码问题(以点破面)。前言:字符串的编码一开始是 ascii,只支持英文,由于多种语言的存在,出现万国码 unicode,但 unicode 不兼容 ascii,而且对存储空间造成浪费,所以出现 utf-8 编码,一种针对 unicode 的可变长...

weixin_39977586的博客 916

国科大学习资料--矩阵论(叶世伟)-期末考试题整理3

国科大学习资料–矩阵论-期末考试题整理3 国科大学习资料–矩阵论-期末考试题整理3 国科大学习资料–矩阵论-期末考试题整理3

无名何许人的博客 1402

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 449

一文学习python中编码和解码

大家都知道计算机是二进制的世界,计算机系统只能识别数字0和1组成的一串串的数字。1位数字代表1个比特(bit),每8个比特代表1个字节(byte),那么1个字节如果都为数字1,如11111111,代表的最大数字是255。如果是2 个字节最大可以表示为 65535,4 个字节最大表示为4294967295。每一种不同的数字0和1的组合,就可以代表一个字符。ASCII 编码最开始是美国人发明的编码 ASCII ,只能表示 256 个字符,仅支持英文字母,数字和少部分符号。GBK 编码。

kymppcds的博客 5093

DeiT详解:知识蒸馏的Transformer

DeiT模型(8600万参数)仅用一台 GPU 服务器在 53 hours train,20 hours finetune,仅使用 ImageNet 就达到了 84.2 top-1 准确性,而无需使用任何外部数据进行训练,性能与最先进的卷积神经网络(CNN)可以抗衡。其核心是提出了针对 ViT 的教师-学生蒸馏训练策略,并提出了方法,使得在视觉领域训练得又快又好。

走在深度学习前沿的小宋 2636

python2和python3 encode decode

python2 string 有encode decode方法print(str(answer.decode("utf-8").encode("gbk", errors="ignore")))python3 string 没有encode decode但是python3可以使用字节码的decode()方法(1)直接b''str = ‘I am string‘byte = b‘ I am bytes...

fkyyly的专栏 2454

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python | encode中的unicode-escape和raw_unicode_escape

本文转自https://www.hiwendi.com/detail/15/。 Python3中的encode(‘unicode-escape’)和encode(‘raw_unicode_escape’) encode decode encode(‘raw_unicode_escape’)和 decode(‘raw_unicode_escape’) encode(‘unicode-escape’)和 decode(‘unicode-escape’) python2使用ASC11码作为默认

weixin_45441279的博客 5170

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python解码_Python 编解码

字符串编码常用类型:utf-8,gb2312,cp936,gbk等。python中,我们使用decode()和encode()来进行解码和编码在python中,使用unicode类型作为编码的基础类型。即decode encodeu = u'中文' #显示指定unicode类型对象ustr = u.encode('gb2312') #以gb2312编码对unicode对像...

weixin_39814088的博客 379

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python2 和python3 打开文件注意事项(两者decode和encode函数的区别)

  比如,需要打开的数据文件puk_training.utf8的样式如图所示 一、python2 打开文件: import sys print(sys.getdefaultencoding()) #系统默认编码方式 f = file(".\\pku_training.utf8") #以file来打开文件 print type(f) #获取f的数据...

liuhong3707的博客 5215

python中encode函数_python中文处理之encode/decode函数

python中文处理相信迷惑过不少同学。下面说说python2/3的encode和decode函数。python2中,使用decode()和encode()来进行解码和编码,以unicode类型作为中间类型。即decode    encodestr ---------> unicode --------->str示例(注意encode和decode的编码必须保持一致)...

weixin_36238073的博客 959

python编码和解码_Python的解码和编码

使用Python语言做网络爬虫或者写自动化脚本时,总会遇到“中文乱码”的问题,很是头疼。很多“中文乱码”的问题是跟Python的解码/编码有关,所以今天和大家说说Python的解码/编码(以Python2.7为例)。1.什么是Python解码/编码?Python里面的解码和编码也就是unicode和str这两种形式的相互转化。解码就是str -> unicode,相反的,编码是unicode ->...

weixin_39932611的博客 260

python实现base64编码与解码。报错TypeError: a bytes-like object is required, not ‘str‘

今天在用base64转码时,报错,提示:TypeError: a bytes-like object is required, not 'str’如下图 报错原因:python2和python3对套接字返回值解码上有区别 处理方法:解决办法非常的简单,只需要用上python的bytes和str两种类型转换的函数encode()、decode()即可! str通过encode()方法可以编码为指定的bytes; 反过来,要把bytes变为str,就需要用decode()方法.(比如我们从网络或磁盘上读取了字节

veryly的博客 3137

python 字节编码_python编码

参考文章:https://blog.youkuaiyun.com/yanghuan313/article/details/63262477python编码:encode()将Unicode字符按照编码规则(如UTF-8)编成字节序列。>>> a = u"测试">>> a.encode("UTF-8")'\xe6\xb5\x8b\xe8\xaf\x95'python解码:de...

weixin_39804631的博客 295
上一篇: Python_多任务:进程、线程、协程
下一篇: Python_列表比较大小
bug捕手
博客等级 码龄4年 899粉丝 417原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值