重定向stdout时的UnicodeEncodeError

时间:2010-02-08 19:07:35

标签: python unicode

我在Python中遇到有关Unicode的问题。我可以在常规终端中打印输出正常,但如果我将stdout重定向到其他位置(或使用subprocess模块捕获它),我会得到UnicodeEncodeError

$ cat example.py 
print u'Example: \u00F1'
$ python example.py 
Example: ñ
$ python example.py > /dev/null
Traceback (most recent call last):
  File "example.py", line 1, in <module>
    print u'Example: \u00F1'
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 9: ordinal not in range(128)

这是为什么?我该如何解决?

1 个答案:

答案 0 :(得分:9)

不通往终端的管道没有编码,因此您需要检查sys.stdout.isatty()并根据需要进行编码。