Python 的编码,关于 Encode, Decode 的简单原则
Python 中 encoding 的处理其实已经很简单了,根据我这近一个月来用python的经验,有一个简单的原则可以作为参考。
基于python 2.7
- 类型要清楚, unicode 不是 str
- decode 之后的结果都是 unicode
- encode 之后的结果都是 str,其编码是你encode的参数
- 输出一律用 str
- 存取一律用 unicode
- 应用入口重设默认编码
sys.setdefaultencoding('utf-8')
(记得需要reload(sys)
)
简单按照这个原则,编码基本上就不会错了。
举个例子,有个GBK编码的文件 name.txt,每行一个人名,现在要处理
1 | for line in open('name.txt').readlines(): |
此外,encode 的时候不一定会成功,这时候会raise一个exception,这是因为 encode 还有一个参数用来控制encode失败后的处理,default是strict,也就是抛异常。
你可以用 encode(src, 'replace')
来处理,replace就表示碰到转不了的,用问号'?'
来代替,而不是抛异常。
具体用法查文档。
同样,输出的时候,输出流也需要有编码。比如stdout默认是ascii的,而你要输出unicode,就需要得到一个基于unicode的输出流,output = codecs.getwriter('utf-8')(sys.stdout)
— END —