今天好不容易重新开始写Python做实验,结果被字符编码虐的体无完肤。其实之前就已经比较清楚python处理字符编码的套路,但是今天白天反复的出现can‘t encode/decode ..., the original code not in 178之类的提示,甚是无力,后来偶尔使用了一下sys.setdefaultencoding(‘utf8‘)就解决了全部问题,真是不解。
下面还是总结一下Python几个编码设置的含义吧。
1. #coding=utf8
这种形式的注释告诉解释器,应该以coding指定的编码解析源文件,也就是指定脚本文件本身使用的编码。
2. sys.setdefaultencoding(‘utf8‘)
这种方式用于告诉python解释器应该以何种编码的方式解释str类型的字符串。python解释器默认的是‘ascii‘编码,可以通过sys.getdefaultencoding()的方式获得该编码信息。
如果想要使用sys.setdefaultencoding(‘utf8‘)重新指定str编码,那么需要reload(sys)才能调用setdefaultencoding()方法。
3. str和unicode
str和unicode是两个不同的工厂方法,产生str或者unicode对象。str方法相当于从一种编码encode到默认编码,而unicode相当于从一种编码decode到默认编码。需要注意的是通常来说默认编码是ascii的。
4. 处理字符串的套路
程序内部尽量全部使用unicode编码,也就是如果是一个字符串,则用u来修饰,如u‘你好‘。如果需要从文件中读入字符串内容,则decode成unicode;如果需要写出到文件或者输出,则encode到相应的编码即可。
希望后面在用python处理字符串编码问题的时候能够顺利解决吧,God bless me.
参考链接
http://www.cnblogs.com/huxi/articles/1897271.html
http://foofish.net/blog/16/understanding-python-charset