gpt4 book ai didi

python - 在 Python 中通过 sys.stdout 编写 unicode 字符串

转载 作者:IT老高 更新时间:2023-10-28 21:05:48 26 4
gpt4 key购买 nike

假设一个人不能使用 print (并因此享受自动编码检测的好处)。这样就剩下 sys.stdout 了。然而,sys.stdoutnot do any sensible encoding 来说太笨了。 .

现在阅读 Python wiki 页面 PrintFails并尝试以下代码:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);

但是这也不起作用(至少在 Mac 上)。太明白为什么了:

>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'

(UTF-8 是终端能理解的)。

因此将上面的代码更改为:

$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
sys.stdout = codecs.getwriter(sys.stdout.encoding)(sys.stdout);

现在 unicode 字符串已正确发送到 sys.stdout 并因此正确打印在终端上(sys.stdout 已附加到终端)。

这是在 sys.stdout 中编写 unicode 字符串的正确方法还是我应该做其他事情?

EDIT:有时——比如说,当将输出传送到 less--sys.stdout.encoding 将是 。在这种情况下,上面的代码会失败。

最佳答案

export PYTHONIOENCODING=utf-8

会完成这项工作,但不能在 python 本身上设置它......

我们可以做的是验证是否没有设置并告诉用户在调用脚本之前设置它:

if __name__ == '__main__':
if (sys.stdout.encoding is None):
print >> sys.stderr, "please set python env PYTHONIOENCODING=UTF-8, example: export PYTHONIOENCODING=UTF-8, when write to stdout."
exit(1)

关于python - 在 Python 中通过 sys.stdout 编写 unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473577/

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