关于python:重定向stdout时的UnicodeEncodeError

UnicodeEncodeError when redirecting stdout

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
$ 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)

为什么会这样?我怎么修?


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