15、字符串的编码和解码的函数
15.1 str.encode([encoding,[errors]]):字符串编码
将Unicode编码转换成其他编码的字符串,如str2.encode(‘gbk2312’),表示将Unicode编码的字符串str2转换成gbk2312的编码。
encoding可以有多种值,比如gb2312 、gbk、 gb18030、big5、base64等。
errors默认值为”strict”,意思是UnicodeError。可能的值还有’ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块。
>>> 'abd'.encode('base64')
'YWJk\n'
15.2 str.decode([encoding,[errors]]):字符串解码
将其他编码的字符串解码成Unicode编码的字符串,如str1.decode(‘gbk’),表示将gbk编码的字符串str1解码成Unicode编码。
>>> 'YWJk\n'.decode('base64')
'abd'
字符串在Python2.x版本内部是以ASCII编码表示的,Python3.x默认是unicode编码。因此,有时候会遇到编码转换的问题,通常是以unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。
因此在转码时,一定要弄明白字符串str是什么编码,然后decode成Unicode,然后再encode成其他编码。代码中字符串的默认编码与代码文件本身的编码一致。
如果字符串是这样定义的:str1 = u’abcd’
则该字符串的编码就被指定成为Unicode了,此时如果再对其解码的话,就会出错。因此,这种情况下,只需要直接使用encode方法进行编码即可。
通常在编码前需要对字符串的是否是Unicode编码进行判断:
isinstance(str1, unicode) #判断字符串是否是unicode编码
有时候我们也需要查看一下系统的编码:
import sys
print sys.getdefaultencoding() #获取系统的编码
编码和解码时,可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。