gpt4 book ai didi

python - python中的标准输出编码

转载 作者:太空狗 更新时间:2023-10-29 17:33:28 25 4
gpt4 key购买 nike

为什么我不应该用它来启动所有我的 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 "åäö" 会抛出异常..

编辑 当 stdout 是一个管道时,这发生在我身上; python encoding.py|cat 会将编码设置为 None

另一种解决方案是更改 codec of stdout sys.stdout = codecs.getwriter('utf8')(sys.stdout) 我猜这是正确的答案,尽管对这个问题有评论。

最佳答案

是的,有充分的理由不这样启动所有 Python 程序。

首先:

sys.stdout.encoding 如果 Python 不知道 stdout 支持什么编码,则为 None。在大多数情况下,这是因为它根本不支持任何编码。在您的情况下,这是因为标准输出是一个文件,而不是终端。但它可以设置为 None,因为 Python 也无法检测终端的编码。

其次:设置环境变量,然后再次使用 smae 命令启动新进程。太丑了。

因此,除非您计划成为唯一使用您的程序的人,否则您不应该那样启动它们。但是,如果您确实计划成为唯一使用您的程序的人,那么请继续。

更深入的解释

Python 2 下一个更好的通用解决方案是将 stdout 视为它的本来面目:一个 8 位接口(interface)。这意味着您打印到标准输出的任何内容都应该是 8 位的。当您尝试打印 Unicode 数据时出现错误,因为 print 将尝试将 Unicode 数据编码为标准输出的编码,如果它是 None,它将假定为 ASCII,并失败,除非您设置 PYTHONIOENCODING。

但是通过打印编码数据,你就没有这个问题了。即使通过管道输出,以下内容也能完美运行:

print u'ÅÄÖ'.encode('UTF8')

(然而,这在Python 3下会失败,因为在Python 3下,stdout不再是8位IO,你应该给它Unicode数据,它会自己编码。如果你给它二进制数据,它将打印表示。因此在 Python 3 上你首先没有这个问题。

关于python - python中的标准输出编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15740236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com