重定向stdout时出现UnicodeEncodeError

22 投票
1 回答
5249 浏览
提问于 2025-04-15 19:02

我在使用Python时遇到了一个关于Unicode的问题。在普通的终端里,我可以正常打印输出,但如果我把输出重定向到其他地方(或者用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 个回答

9

如果管道没有连接到终端(也就是没有直接显示在屏幕上),那么它们就没有编码。所以你需要检查一下 sys.stdout.isatty(),如果需要的话就进行编码。

撰写回答