Python 字符编码问题的处理
python中的字符编码问题往往是初学者容易弄不明白的问题, 要想将这个问题搞清楚,需要先弄明白以下的概念
- decode 和 encode 函数的作用
- 字符串字面量的编码格式
decode(str) - 将其它编码字符串转换成Unicode编码字符串, 返回转换成Unicode编码的字符串
encode(str) - 将Unicode字符串转换成其它编码(str)字符串, 返回转换成其它编码后的字符串.
所以, decode 和 encode的作用就是将其他编码转换成Unicode , 将Unicode转换成其他编码.
值得注意的是 ,调用decode的对象的本身的编码和decode形参指明的编码不一致时函数会出错,比如,str1字符串对象它本身的编码是ASCII的,但传入的参数为'gb2312',则函数会中断.
而当一个字符串对象它本身的编码不是Unicode却调用encode函数,那么函数也会出错.
# '大家好' 是一个字符串字面量, 在不同的编辑器中, 它的编码格式是不一样的 # 如果编辑器是以utf-8编码格式来保存文本的, 那么,所有的字符串字面量都是utf-8格式 # 如果编辑器是以gb2312编码格式来保存文本的,那么, 所有的字符串字面量都是ASCII格式 str1 = '大家好' # 因为编辑器是以gb2132编码保存文本的, 所以这里先将gb2312的字符串转换成Unicode类型的字符串# 因此, str1是gb2132编码的, str2是Unicode的 str2 = str1.decode('gb2312') # str2是Unicode编码的,因此可以调用encode函数 str2.encode("utf-8")
总结
- 在调用decode函数时,一定要弄清楚调用这个函数的字符串对象本身是什么编码,只有这样你才知道你要传入的形参是什么
- 在调用encode函数时,一定要确保调用这个函数的字符串对象本身是Unicode编码的.