首页 > 开发 > Python > 正文

Python字符串处理函数之encode()函数的使用方法

2023-04-25 12:32:04
字体:
来源:转载
供稿:网友

在Python中使用encode()函数运用指定的编码方式对字符串进行编码。

关于编码的有关知识,本站在《Python中的Unicode编码格式》一文中进行了详细介绍,读者可以通过这篇文章了解有关字符串编码的问题。

一、Python中encode()函数简介

在Python中,每个字符串对象都有encode()函数,该函数将按照用户指定的编码方式(如UTF-8,UTF-16等)对字符串对象进行编码,编码后返回字符串的字节(Bytes)对象,如未指定编码格式,该函数默认使用“utf-8”编码方式。

该函数的语法格式如下所示:

str.encode(encoding = "utf-8", errors = "strict")

语法中,str是待编码的字符串对象。encoding参数给出编码方式,默认为“utf-8”,errors 参数给出编码失败时的错误处理方案,默认为“strict”,即严格的错误处理方案。

Python中的encode()函数

二、基本使用举例

下面这个例子中使用函数各参数的默认值进行编码,并输出编码前后对象的类型。

str1 = "武林网VEVB"
str_re1 = str1.encode()
print('原字符串:', str1)
print('原字符串类型:', type(str1))
print('转换后的形式:', str_re1)
print('转换后的对象类型:', type(str_re1))

输出结果形式如下:

原字符串: 武林网VEVB
原字符串类型: <class 'str'>
转换后的形式: b'/xe7/xbf/x94/xe5/xae/x87/xe4/xba/xadIT/xe4/xb9/x90/xe5/x9b/xad'
转换后的对象类型: <class 'bytes'>
从上面的输出结果中可以看出,编码前str1的类型为<class 'str'>,即字符串类型,编码后的类型为:<class 'bytes'>,即字节类型,同时输出转换后的对象我们发现在前面有个字符'b',其表示后面的字符串以字节形式进行存储。在存储时,utf-8编码格式下,汉字占用三个字节,如上面前三个字节(以十六进制形式显示的):/xe7/xbf/x94,即是字符“翔”的编码。

三、encode()函数参数encoding的作用

encoding用于指定字符串的编码方式。

Python自带了很多编解码器,这些编解码器要么以C函数的方式实现,要么以映射表的方式存放到词典中。

这些内置的编解码器并非都能运用到每一种语言系统中,运用不正确在解码时可能会出现所谓的乱码问题。

str1 = "武林网VEVB"
re1 = str1.encode('utf-8')
re2 = str1.encode('gb2312')
re3 = str1.encode('gbk')
re4 = str1.encode('utf-16')
print('utf-8:', re1)
print('gb2312:', re2)
print('gbk:', re3)
print('utf-16:', re4)

运行结果如下所示:

utf-8: b'/xe7/xbf/x94/xe5/xae/x87/xe4/xba/xadIT/xe4/xb9/x90/xe5/x9b/xad'
gb2312: b'/xcf/xe8/xd3/xee/xcd/xa4IT/xc0/xd6/xd4/xb0'
gbk: b'/xcf/xe8/xd3/xee/xcd/xa4IT/xc0/xd6/xd4/xb0'
utf-16: b'/xff/xfe/xd4/x7f/x87[/xadNI/x00T/x00PN/xedV'
对西文字符也可以使用ASCII编码方式,如果指定的编码方式不含相关字符的话,在没有指定errors参数时,默认会报错。

re5 = "I Love China!".encode("ASCII")
print("西文ASCII:", re5)
re6 = "沉痛哀悼袁隆平和吴孟超两位院士。".encode("ASCII")
print("ASCII运用到中文会出错:", re6)

输出结果如下:

西文ASCII: b'I Love China!'
Traceback (most recent call last):
  File "D:/01Lesson/PY/encode_detail.py", line 21, in <module>
     re6 = "沉痛哀悼袁隆平和吴孟超两位院士。".encode("ASCII")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-15: ordinal not in range(128)
从上面的结果可以看出,汉字运用ASCII编码方式给出UnicodeEncodeError错误,意思是说:'ASCII'编解码器不能对字符串0~15位置的字符进行编码,序号超出范围(最大值128)。

四、encode函数中参数errors的作用

errors参数的作用是在编码出现错误时给出错误的处理方式,默认值为'strict',即出现错误时将抛出UnicodeError编码异常错误。UnicodeError包含编码错误的描述内容,其具体内容包括引发异常的编码方式名称、错误原因、编码对象出现错误的起止字符位置。

其它可以使用的值描述如下:

ignore:忽略不能进行编码的字符,编码结果中将不会包含不能进行编码的字符,且不会再给出任何提示信息。

replace:使用问号(?)替换不能进行编码的字符。

backslashreplace:使用反斜杠(/)开始的转义字符序列(/uNNNN)来替代不能实现编码的字符。

xmlcharrefreplace:使用适当的XML字符引用来替换不能实现编码的字符。其替换后的字符形如:&#NNNNN。

namereplace:使用反斜杠(/)开始的转义字符名称序列(/N{...})来替换未能转换的字符。此值是在Python3.5中新加入的。

下面给出一些例子来演示各种取值的输出情况:

str2 = "CRY:沉痛哀悼袁隆平院士和吴孟超院士CRY。"
re8 = str2.encode("ASCII",'ignore')
print("re8=", re8)
re9 = str2.encode("ASCII", 'replace')
print("re9=", re9)
re10 = str2.encode("ASCII", 'backslashreplace')
print("re10=", re10)
re11 = str2.encode("ASCII", 'xmlcharrefreplace')
print("re11=", re11)
re12 = str2.encode("ASCII", 'namereplace')
print('re12=', re12)

re7 = str2.encode("ASCII")
print("re7=", re7)

运行结果如下所示:

Python中unicode()函数中errors参数演示结果

上面例子中最后一个是没有指定errors参数的情况。其它读者根据例子中的代码对照结果观察每个参数的输出情况。

以上详细介绍了Python中字符串处理函数encode()的使用方法,并对其两个参数encoding和errors进行了全面解释。

本文(完)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表