2010-02-08 15 views
20

我在使用Python時遇到了有關Unicode的問題。我可以打印輸出精美的常規終端,但如果我重定向stdout其他地方(或與subprocess模塊捕獲它),我得到了UnicodeEncodeError重定向標準輸出時出現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

http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python本質上是同一個問題,答案解決了我(有希望)的問題。 – dbr 2010-02-09 01:17:08

回答

8

不導致終端的管道沒有編碼,因此您需要檢查sys.stdout.isatty()並在需要時進行編碼。

+3

或者(甚至更好)只是總是編碼。 – 2010-02-08 19:11:35

+0

有關如何定義編碼的更多信息:http://www.python.org/dev/peps/pep-0263/ – 2010-02-08 19:26:35

+1

不,PEP 263是關於指定* source *編碼的,並且與輸出編碼無關。 – 2010-02-08 20:39:48