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")
参考: