自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
最早的字符串编码是美国标准信息交换码,即ASCII码。它仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码最多只能表示256个符号,每个字符占一个字节。随着信息技术的发展,各国的文字都需要进行编码,于是出现了GBK、GB2312、UTF-8编码等。其中GBK和GB2312是我国制定的中文编码标准,使用一个字节表示英文字母,2个字节表示中文字符。而UTF-8是国际通用的编码,对全世界所有国家需要用到的字符都进行了编码。UTF-8采用一个字节表示英文字符、3个字节表示中文。在Python 3.X中,默认采用的编码格式为UTF-8,采用这种编码有效地解决了中文乱码的问题。
在Python中,有两种常用的字符串类型,分别为str和bytes。其中,str表示Unicode字符(ASCII或者其他);bytes表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在一起使用。通常情况下,str在内存中以Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存到磁盘上,就需要把str转换为字节类型,即bytes类型。
说明:bytes类型的数据是带有b前缀的字符串(用单引号或双引号表示),例如,b'\xd2\xb0'和b'mr'都是bytes类型的数据。
str类型和bytes类型之间可以通过encode()和decode()方法进行转换,这两个方法是互逆的过程。
1 使用encode()方法编码
encode()方法为str对象的方法,用于将字符串转换为二进制数据(即bytes),也称为“编码”,其语法格式如下:
str.encode([encoding="utf-8"][,errors="strict"])
参数说明:
l str:表示要进行转换的字符串。
l encoding="utf-8":可选参数,用于指定进行转码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。
l errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。
说明:在使用encode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。
例如,定义一个名称为verse的字符串,内容为“野渡无人舟自横”,然后使用endoce()方法将其采用GBK编码转换为二进制数,并输出原字符串和转换后的内容,代码如下:
verse = '野渡无人舟自横'
byte = verse.encode('GBK') # 采用GBK编码转换为二进制数据,不处理异常
print('原字符串:',verse) # 输出原字符串(没有改变)
print('转换后:',byte) # 输出转换后的二进制数据
上面的代码执行后,将显示以下内容:
原字符串: 野渡无人舟自横
转换后: b'\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1'
如果采用UTF-8编码,转换后的二进制数据为:
b'\xe9\x87\x8e\xe6\xb8\xa1\xe6\x97\xa0\xe4\xba\xba\xe8\x88\x9f\xe8\x87\xaa\xe6\xa8\xaa'
2 使用decode()方法解码
decode()方法为bytes对象的方法用于将二进制数据转换为字符串,即将使用encode()方法转换的结果再转换为字符串,也称为“解码”。语法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
参数说明:
l bytes:表示要进行转换的二进制数据,通常是encode()方法转换的结果。
l encoding="utf-8":可选参数,用于指定进行解码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。
注意:在设置解码采用的字符编码时,需要与编码时采用的字符编码一致。
l errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。
说明:在使用decode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。
例如,将5.2.1小节中的示例编码后会得到二进制数据(保存在变量byte中),要进行解码可以使用下面的代码:
print('解码后:',byte.decode("GBK")) # 对进行制数据进行解码
上面的代码执行后,将显示以下内容:
解码后: 野渡无人舟自横