我是否有充分的理由不应该用这种方式开始所有我的Python程序呢?这样做是否会丢失一些特殊的东西?
#!/usr/bin/python
import os, sys
if sys.stdout.encoding == None:
os.putenv("PYTHONIOENCODING",'UTF-8')
os.execv(sys.executable,['python']+sys.argv)
print sys.stdout.encoding
有60个问题与PYTHONIOENCODING相关,所以我猜这是一个常见的问题,但以防万一你不知道,这是因为当sys.stdout.encoding == None
时只能打印ASCII字符,所以例如print "åäö"
将抛出异常。
编辑 当stdout是管道时,会发生这种情况;python encoding.py | cat
将设置编码为None
另一个解决方案是更改stdout的编解码器:sys.stdout = codecs.getwriter('utf8')(sys.stdout)
我猜这是正确的答案,尽管在该问题的评论中并非如此。
PYTHONIOENCODING
的工作。 - Martijn Pieters