当传递Python程序的输出的管道时,Python解释器会对编码感到困惑,并将其设置为None。这意味着这样的程序:
# -*- coding: utf-8 -*-
print u"åäö"
正常运行时可以正常工作,但失败:
UnicodeEncodeError:'ascii'编解码器无法在位置0编码字符u'\ xa0':序数不在范围内(128)
以管道顺序使用时。
使管道工作的最佳方法是什么?我能告诉它使用外壳程序/文件系统/正在使用的任何编码吗?
到目前为止,我所看到的建议是直接修改site.py,或使用此hack硬编码defaultencoding:
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
有没有更好的方法可以使管道工作?
chcp 65001
在执行脚本之前运行。这可能会有问题,但通常会有所帮助,并且不需要太多的输入(少于set PYTHONIOENCODING=utf_8
)。
setx PYTHONENCODING utf-8
如果要保存键入,请尝试使其永久。