【发布时间】:2010-12-01 05:00:51
【问题描述】:
暂时假设不能使用print(并因此享受自动编码检测的好处)。所以这给我们留下了sys.stdout。但是,sys.stdout 对not 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 字符串的正确方法还是我应该做其他事情?
编辑:有时——比如说,当输出到less--sys.stdout.encoding 将是None。在这种情况下,上面的代码会失败。
【问题讨论】:
-
s/my/one's/ 以保持一致性
标签: python unicode macos terminal stdout