【发布时间】:2013-03-22 08:06:51
【问题描述】:
我是否有充分的理由不应该用它来启动我的所有我的 python 程序?像这样执行 exec 时有什么特别的丢失吗?
#!/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 questions about PYTHONIOENCODING 所以我想这是一个常见问题,但如果你不知道,这样做是因为当sys.stdout.encoding == None 时你只能打印ascii 字符,例如print "åäö" 会抛出异常..
EDIT 当 stdout 是管道时会发生这种情况; python encoding.py|cat 将编码设置为无
另一种解决方案是更改 codec of stdout sys.stdout = codecs.getwriter('utf8')(sys.stdout),我猜这是正确的答案,尽管该问题的 cmets。
【问题讨论】:
-
这是什么平台,顺便说一句?只是出于兴趣。
-
在这些情况下,什么是 标准输出?管道?你怎么知道管道连接的任何东西都可以支持UTF8?在这种情况下,设置管道以指定
PYTHONIOENCODING的工作就是。 -
问题是 ASCII 不是一个健全的默认值,我同意如果有人真的想要 latin-1 或 UTF-16,他们可以设置那个 ENV 变量,但默认 UTF-8 很多更好
-
@LennartRegebro Ubuntu 12.04 python 2.7
标签: python unicode character-encoding