Python 2.X的编码问题,一直很令人恼火。

以前在博客写过一篇 Python Encoding,找个时间迁移过来。

今天(2016-09-27)看同事的一个代码时又遇到一个之间没注意的问题,说白了还是编码这块没完全弄透彻。

大致是这样:

# python 2.7
for a, b, c in args:
    print a, b, c  # a is unicode, b/c is str

手动测试写stdout没问题;加到crontab写/dev/null就出现编码问题。

原因是stdout支持写utf-8,如果不支持也会报错。A subtle problem causing even print to fail is having your environment variables set wrong, eg. here LC_ALL set to "C" 参考

而如果要写文件的话,要么encode转为str,要么如使用codecs.open("filename", "w", "utf-8")打开文件句柄时指定编码方式,我在simiki项目也都是这么处理了。

一个不推荐的方法就是修改全局的默认编码(默认是ascii):

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

参考: