2013年3月22日金曜日

pythonでredirectするとエンコーディングエラー

Pythonでprintで日本語の文字を書き出している場合、画面に出してると大丈夫なのに、redirectすると したのようなエラーがでることがある。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
調べてみるとttyのときだけ親切に色々やってくれているんだけど、 redirectとかpipeだとそれが機能しなくなり、内部で持ってるunicode表現文字をデフォルトのasciiにエンコードしようとして失敗する、 ということのようだ。 ここにいい方法がのってた。
import sys
import codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
としておくと以降のstdoutへの出力が常にutf8で自動的にencodeされるようになる。

0 件のコメント: