Python字符串编码转换 encode()和decode()⽅法详
细说明
⽬录
1.Python encode()⽅法
2.Python decode()⽅法
前⾔:
我们知道,最早的字符串编码是 ASCII 编码,它仅仅对 10 个数字、26 个⼤⼩写英⽂字母以及⼀些特殊字符进⾏了编码。ASCII 码做多只能表⽰ 256 个符号,每个字符只需要占⽤ 1 个字节。
随着信息技术的发展,各国的⽂字都需要进⾏编码,于是相继出现了GBK、GB2312、UTF-8 编码等,其中 GBK 和 GB2312 是我国制定的中⽂编码标准,规定英⽂字符母占⽤ 1 个字节,中⽂字符占⽤ 2 个字节;⽽ UTF-8 是国际通过的编码格式,它包含了全世界所有国家需要⽤到的字符,其规定英⽂字符占⽤ 1 个字节,中⽂字符占⽤ 3 个字节。
Python 3.x 默认采⽤ UTF-8 编码格式,有效地解决了中⽂乱码的问题。
在Python 中,有 2 种常⽤的字符串类型,分别为str 和bytes 类型,其中 str ⽤来表⽰ Unicode 字符,bytes ⽤来表⽰⼆进制数据。str 类型和bytes 类型之间就需要使⽤encode() 和decode() ⽅法进⾏转换。
1.Python encode()⽅法
encode() ⽅法为字符串类型(str)提供的⽅法,⽤于将 str 类型转换成 bytes 类型,这个过程也称为“编码”。
encode() ⽅法的语法格式如下:
注意:格式中⽤ [] 括起来的参数为可选参数,也就是说,在使⽤此⽅法时,可以使⽤ [] 中的参数,也可以不使⽤。
该⽅法各个参数的含义如表 1 所⽰。
表 1 encode()参数及含义:
参数含义
str表⽰要进⾏转换的字符串。
encoding = "utf-8"指定进⾏编码时采⽤的字符编码,该选项默认采⽤ utf-8 编码。例如,如果想使⽤简体中⽂,可以设置gb2312。
当⽅法中只使⽤这⼀个参数时,可以省略前边的“encoding=”,直接写编码格式,例如 de("UTF-8")。
errors = "strict"指定错误处理⽅式,其可选择值可以是:
strict:遇到⾮法字符就抛出异常。
ignore:忽略⾮法字符。
replace:⽤“?”替换⾮法字符。
xmlcharrefreplace:使⽤ xml 的字符引⽤。该参数的默认值为 strict。
注意:使⽤ encode() ⽅法对原字符串进⾏编码,不会直接修改原字符串,如果想修改原字符串,需要重新赋值。【例 1】将 str 类型字符串“C语⾔中⽂⽹”转换成 bytes 类型。
>>> str = "C语⾔中⽂⽹"
>>> de()
b'C e8 af ad e8 a8 80 e4 b8 ad e6 96 87 e7 bd 91'
此⽅式默认采⽤ UTF-8 编码,也可以⼿动指定其它编码格式,例如:
>>> str = "C语⾔中⽂⽹"
>>> de('GBK')
b'C d3 ef d1 d4 d6 d0 ce c4 cd f8'
2.Python decode()⽅法
和encode() ⽅法正好相反,decode() ⽅法⽤于将bytes 类型的⼆进制数据转换为 str 类型,这个过程也称为“解码”。decode() ⽅法的语法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
字符串转数组编码方式该⽅法中各参数的含义如表 2 所⽰。
表 2 decode()参数及含义:
参数含义
bytes表⽰要进⾏转换的⼆进制数据。
encoding="utf-8"指定解码时采⽤的字符编码,默认采⽤ utf-8 格式。当⽅法中只使⽤这⼀个参数时,可以省略“encoding=”,直接写编码⽅式即可。
注意,对 bytes 类型数据解码,要选择和当初编码时⼀样的格式。
errors = "strict"指定错误处理⽅式,其可选择值可以是:
strict:遇到⾮法字符就抛出异常。
ignore:忽略⾮法字符。
replace:⽤“?”替换⾮法字符。
xmlcharrefreplace:使⽤ xml 的字符引⽤。该参数的默认值为 strict。
【例 2】
>>> str = "C语⾔中⽂⽹"
>>> de()
>>> bytes.decode()
'C语⾔中⽂⽹'
注意:如果编码时采⽤的不是默认的 UTF-8 编码,则解码时要选择和编码时⼀样的格式,否则会抛出异常,例如:>>> str = "C语⾔中⽂⽹"
>>> bytes = de("GBK")
>>> bytes.decode() #默认使⽤ UTF-8 编码,会抛出以下异常
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
bytes.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd3 in position 1: invalid continuation byte
>>> bytes.decode("GBK")
'C语⾔中⽂⽹'
到此这篇关于Python字符串编码转换encode()和decode()⽅法详细说明的⽂章就介绍到这了,更多相关Python encode()和decode()⽅法内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论