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编码的.
posted @ 2016-11-02 09:05  拖鞋搭袜  阅读(233)  评论(0编辑  收藏  举报