首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中通过sys.stdout编写unicode字符串

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

Stack Overflow用户
提问于 2009-09-24 19:02:36
回答 5查看 35K关注 0票数 19

假设一个人不能使用print (因此享受自动编码检测的好处)。所以我们只剩下sys.stdout了。然而,对于not do any sensible encoding来说,sys.stdout是如此愚蠢。

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

代码语言:javascript
复制
$ python -c 'import sys, codecs, locale; print str(sys.stdout.encoding); \
  sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout);

然而,这也不起作用(至少在Mac上)。也可以看看原因:

代码语言:javascript
复制
>>> import locale
>>> locale.getpreferredencoding()
'mac-roman'
>>> sys.stdout.encoding
'UTF-8'

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

因此,我们将上面的代码改为:

代码语言:javascript
复制
$ 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。在这种情况下,上面的代码将失败。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-24 19:40:08

我不清楚为什么你不能做打印;但假设是这样,是的,在我看来这种方法是正确的。

票数 3
EN

Stack Overflow用户

发布于 2011-06-16 01:04:06

代码语言:javascript
复制
export PYTHONIOENCODING=utf-8

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

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

代码语言:javascript
复制
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)
票数 34
EN

Stack Overflow用户

发布于 2009-09-25 02:55:36

最好的办法是检查您是否直接连接到终端。如果是,请使用终端的编码。否则,请使用系统首选编码。

代码语言:javascript
复制
if sys.stdout.isatty():
    default_encoding = sys.stdout.encoding
else:
    default_encoding = locale.getpreferredencoding()

同样重要的是,始终允许用户指定他们想要的任何编码。通常我将其设置为命令行选项(如-e ENCODING),并使用optparse模块对其进行解析。

另一件好事是用自动编码器覆盖而不是 sys.stdout。创建编码器并使用它,但不要使用sys.stdout。您可以导入第三方库,这些库将编码的字节串直接写入sys.stdout

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1473577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档