在Linux下將stdout結果導向檔案時,Unicode資料輸出造成UnicodeEncodeError的解決方法
八月 15, 2011, 4:12 p.m.
問題描述: 在Linux下可將帶Unicode的字串利用print指令輸出到終端,其中將如果輸出導向一個檔案時,python會顯示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)
問題解析:這是由於標準的命令列終端是帶有編碼功能的,但若不是輸出到終端如輸出到檔案時,我們必須將unicode string手動編碼為byte string,最簡單的方法是利用字串類別內建的方法str.encode([encoding[, errors]]),範例如下:
print u'Example: \u00F1'.encode('utf-8')
這對擺在crontab中進行的worker process非常重要,因為這樣你就能夠在log日誌中提供更詳細的資訊以利於管理。
參考資料:
