【python】关于encode(),decode()的一些总结

pythonencode()decode()函数以及常见的UTF-8编码 阅读详情

*编码的发展进程

最初,大家使用的字符串编码是ASCII编码。但是它只对10个数字,26个大小写英文字母,以及一些特殊字符,共计256个,每个字符占一个字节。为了兼容各个国家的一些文字,出现了GBK,GB2312,UTF-8编码等。

其中GBK,GB2312是我国制定的中文编码标准,并规定一个英文字母字符占1字节,中文字符占2字节。

UTF-8则是国际通用的编码格式,它包含了全世界所有国家需要用到的字符,但是规定则是一个英文字母在1字节,中文占3字节。

注意:

Python 3.x以上版本默认采用的是UTF-8的编码格式,好处就是有效的解决了中文乱码的问题,不用单独去编码啦。

在python中,有两种常见的字符串类型,str 和 bytes类型。其中,str是用来表示Unicode字符,bytes用来表示二进制数据。str类型于bytes类型之间转换,就要用到encod() (str 转 bytes),decode() (bytes 转 str)。

encode() 方法

encode() 是字符串类型(str)提供的方法,用于将str类型转换成bytes类型,这个过程也称为“编码”。

语法格式:

str.encode([encoding = 'utf-8',[errors = 'strict'])

注意:[]中括号里面的一般为可选参数,如果不人为传参,则用括号里面的默认参数。各参数表如下

参数含义
str表示要进行转换的字符串
encoding = ‘utf-8’指定进行采用的编码,该选择默认采用。例如,如果想使用简体中文,可以设置bg2312。当方法中只使用第一个参数时,可以省略前面的"encoding=",直接写编码格式,如:str.encode(“UTF-8”)
errors = ‘strict’指定错误处理方式,可选值有:1.strict:遇到非法字符抛出异常;2.ignore:忽略非法字符;3.replace:用"?"代替非法字符;4.xmlcharrefreplace:使用xml的字符引用;该参数默认值为strct

注意:使用encode()方法对原字符进行编码时,不会直接修改原字符串,如果需要修改原字符串,需要重新赋值

【例1】

str = "python 真有趣儿"
str.encode()
b'python \xe7\x9c\x9f\xe6\x9c\x89\xe8\xb6\xa3\xe5\x84\xbf'

默认采用UTF-8,也可以手动指定其他编码格式,例如:

str.encode('gbk')
b'python \xd5\xe6\xd3\xd0\xc8\xa4\xb6\xf9'

decode()方法

和encode()方法正好相反,decode()方法用于将bytes类型的二进制数据转换为str类型,这个过程也称为”解码“
语法格式:

bytes.decode([encoding = "utf-8)"],[errors = "strict"])

表2 decode()参数及含义

参数含义
bytes表示要进行转换的二进制数据
encoding = “utf-8”指定解码采用的字符编码,默认采用utf-8格式。当方法中只使用这一参数时,可省略"encoding=",直接写编码方式即可。注意,对bytes类型解码时,要选择和当初编码时一样的格式
errors = “strict”指定错误处理方式,可选值是:1.strct:抛出异常;2.ingore:忽略非法字符;3.replace:用”?“替换非法字符;3.xmlcharrefreplace:使用xml的字符引用。该参数的默认值为:strict

例1

str
'python 真有趣儿'
demo_bytes = str.encode()
demo_bytes.decode()
'python 真有趣儿'

注意:如果编码时采用编码格式不是默认的 UTF-8 ,那解码时就要选择与编码一致的编码,否则抛出异常,例如:

str = "RockNRoll 永远年轻!"
bytes = str.encode('gbk')
bytes
b'RockNRoll \xd3\xc0\xd4\xb6\xc4\xea\xc7\xe1\xa3\xa1'
bytes.decode()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 10: invalid continuation byte
bytes.decode("GBK")
'RockNRoll 永远年轻!'

有趣的是,如果用默认的utf-8编码,用gbk解码的话,不一定会报错,也有可能会乱码,例3

str = "RockNRoll 永远年轻"  #乱码
bytess = str.encode()
bytess.decode("GBK")
'RockNRoll 姘歌繙骞磋交'
bytess.decode("gbk")
'RockNRoll 姘歌繙骞磋交'
bytess.decode(encoding = 'gbk',errors = 'strict')
'RockNRoll 姘歌繙骞磋交'

在以上"RockNRoll 永远年轻!”加个中文字符的“!”感叹号则会报错抛出异常,而英文字符"!"则不会

a
'RockNRoll 姘歌繙骞磋交!'
str = "RockNRoll 永远年轻!!"
... bytess = str.encode()
... a =bytess.decode("GBK")
... 
Traceback (most recent call last):
  File "<input>", line 3, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0x81 in position 25: incomplete multibyte sequence

所以,如果解码和编码不一致的话,会出现意想不到的情况,报错抛出异常or 乱码,切记哦

mask decoder 在语义分割和实例分割任务中,Mask Decoder 通常被添加到预训练模型的中间层之后,用于将图像特征转换为像素级别的掩码。Mask Decoder 通常由一个卷积神经网络组成,它的输入是预训练模型的中间层的输出,输出是与输入图像大小相同的掩码。在推理时,Mask Decoder 可以将预测的特征图转换为像素级别的掩码,从而实现对图像中不同物体的分割。Mask Decoder 的设计和微调方法可以根据不同的任务和数据集进行调整,以提高模型的性能和泛化能力。 阅读详情

相关推荐

【图像分割】【深度学习】SAM官方Pytorch代码-Mask decoder模块MaskDeco网络解析

【图像分割】【深度学习】SAM官方Pytorch代码-Mask decoder模块MaskDeco网络解析

yangyu0515的博客 8745

从Faster RCNN开始学python 篇外卷pycocotools(一)

在Faster RCNN中有使用一些额外的程序,类等等,为了使文章整体内容不过于分散,这里作为篇外卷学习。 文件地址:\py-faster-rcnn\lib\pycocotools 首先这里先对简单的mask.py的讲解: import pycocotools._mask as _mask encode = _mask.encode decode = _mask.dec...

白色字体的博客 3029

pythonencode()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万+

pythonencode(),decode(),urlencode()等的介绍

一、urlencode() urllib库中的urlencode()方法,接受参数形式为:[(key1, value1), (key2, value2),…] 和 {‘key1’: ‘value1’, ‘key2’: ‘value2’,…} 返回的是形如key2=value2&key1=value1的字符串。 import urllib data=[('email','北京1234@qq....

qq_44658096的博客 5729

Python - Encode()Decode()、Encoding()

encode:编码 decode:解码 str字符串默认编码为:Unicode >>> 左侧为编码后的Bytes码,解码为Unicode字符,再被编码为指定的其他格式编码 (注:↑本图片来源"百度图片") 【encoding()】 使用Python打开文件时,文件数据按照文件本身的编码方式转换为字节码,如果这时需要将编码转换,那么我们可以使用encoding...

4587

Python中的decode(),encode()等问题

一般程序第一行或者第二行都会有#-*- coding:utf-8 -*-,这是告诉解释器,我要用utf-8来处理中文字符,把所有的中文字符都编码成utf-8,否则的话解释器将按照操作系统的编码规则来,这将不利用程序移植。 u‘string',string代表一段字符串(一般是中文字符串),这是把这段字符串表示成unicode类型,unicode类型作为编程的基础类型(能表示所有语...

245

pythonencode()、decode()

1 区分维度1:系统编码 文件编码 python编码 2 区分维度2:python开发过程中,涉及到的编码:(1)python程序文件的编码;(2)python运行环境ide的编码;(3)python程序读取外部文件的编码 3 系统编码:即操作系统的编码 import sys sys_code = sys.getdefaultencoding() print(sys_code) 我用的是win10系统,执行的结果是utf-8,一直以为windows的编码是gbk,瞬间懵圈~...

sanjixing999的专栏 249

pythonencode(), decode()

str.encode([encoding="utf-8"]) 用于str类型转换成bytes类型, 称为编码 "中国".encode("utf-8") b'\xe4\xb8\xad\xe5\x9b\xbd' bytes.decode([encoding="utf-8"]) 与encode相反, 用于将bytes类型转换成 str类型。 注意解码和编码的时候格式要一样,否则会报错。 a = "中国".encode("gb2312") a.decode("gb2312") '中国...

qq_40722582的博客 230

python无法使用decode_Python中的decode(),encode()等问题

一般程序第一行或者第二行都会有#-*- coding:utf-8 -*-,这是告诉解释器,我要用utf-8来处理中文字符,把所有的中文字符都编码成utf-8,否则的话解释器将按照操作系统的编码规则来,这将不利用程序移植。u‘string',string代表一段字符串(一般是中文字符串),这是把这段字符串表示成unicode类型,unicode类型作为编程的基础类型(能表示所有语言)。有如下规则:d...

weixin_36239480的博客 1653

Python 编码encode()、 解码decode()问题

乱码这种东西,时不时出现。本来开开心心想着我要学习啦,然后兴高采烈打开了比火星文还火星文的字符…… 没事,我可以搞定这堆鬼画符。 先来讲一下为什么有乱码这种东西的存在 故事是这样滴: 字符串是Python的一种数据类型,它的处理会涉及到编码问题。 我们可爱的计算机只能识别计算机语言,它以二进制字节形式来存储数据,就是0和1构成的一个长长的二进制字节(一般人是识别不了这种这么原始的语言的) 而作...

weixin_30256505的博客 247

python decode()encode() 、编码与反编码

python中提到unicode,一般指的是unicode对象,比如:“叫我”的对象为'\u53eb\u6211''. 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成uni

Andrew9Tech的专栏 1028

Python标准库:codecs【专门做编码转换】【open()encode()decode()、lookup()、getencoder()】【读写文件codecs.open()优于open()

codecs专门用作编码转换,当我们要做编码转换的时候可以借助codecs很简单的进行编码转换codecs模块提供一个open方法,三个参数encoding, errors, buffering,这三个参数都是可选参数,但是对于应用来说,需要明确指定encoding的值,而errors和buffering使用默认值即可。

u013250861的博客 6815

Python必看,Pythonencode(),decode()的本质

学过编码解码的同学应该都知道,是二进制到我们认识的字母数字的过程叫做编码,但在python里,为什么是我们认识的字母数字到二进制叫编码呢? 我看了网上现有的讲解,都没能从本质讲清这个区别,其实要想理解这个区别,需要先理解解码和编码的本质是什么。 简单来说,编码是种一对多的关系,将一种表现形式,通过各种规则,变成多种表现形式。而解码是种多对一的关系,是编码的逆过程,将多种表现形式,通过确定的规则,变为一种表现形式。 在传统的编码与解码中,编码和解码的这个基本的一都是二进制数据,而在Python中,编

qq_34784354的博客 369

python编码与解码,encode()与Decode(),最简单通俗易懂的

python编码与解码,encode()与Decode(),最简单通俗易懂的

qq_45730325的博客 748

Python 多种中文乱码问题原因及解决方法(decode()encode()、raw_input())

Python 多种中文乱码问题一直困扰大多数初学者,特别是在Python2中很难解决,通过多次遇到乱码问题的总结,以及查询到的相关资料和解决方法,本文主要介绍总结一下Python 中文乱码问题原因及解决方法,以及decode()encode()、raw_input()方法编码相关问题介绍。 原文地址:Python 多种中文乱码问题原因及解决方法(decode()encode()、raw_input()) ...

weixin_42098295的博客 266

python之通过encode()decode()介绍编码问题

1.字符串在python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode解码(encode)成另一种编码。 2.decode的作用是将其他编码的字符串转换成Unicode编码,如str1.decode('gb2312'),等价于unicode(str1,'gb2312')表示

SXY的博客 1077

字符串(string)篇(一)

在第三个例子中,我们限制了搜索范围。在Python中,expandtabs()是字符串(str)对象的一个方法,用于将字符串中的制表符(tab)转换为空格。在Python中,encode()是一个字符串(str)对象的方法,用于将字符串编码为字节串(bytes)。在Python中,capitalize() 是一个字符串(string)方法,用于将字符串的第一个字符转换为大写,而其余字符转换为小写。在Python中,find()是一个字符串(str)对象的方法,用于查找子字符串在字符串中首次出现的位置。

记录学习过程 1903
上一篇: python字符串与列表之间的转换的思考
下一篇: 【python】不同的数据类型赋值区别
一念花开落天涯
博客等级 码龄6年 0粉丝 · 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值