Pythonプログラムの出力をパイプ処理すると、Pythonインタープリターはエンコードについて混乱し、それをNoneに設定します。これは、次のようなプログラムを意味します。
# -*- coding: utf-8 -*-
print u"åäö"
正常に実行すると正常に動作しますが、次で失敗します:
UnicodeEncodeError: 'ascii'コーデックは位置0の文字u '\ xa0'をエンコードできません:序数が範囲(128)にありません
パイプシーケンスで使用する場合。
配管時にこれを機能させる最良の方法は何ですか?シェル/ファイルシステム/使用しているエンコーディングを使用するように指示することはできますか?
これまで見てきた提案は、site.pyを直接変更するか、このハックを使用してdefaultencodingをハードコーディングすることです。
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print u"åäö"
配管を機能させるより良い方法はありますか?
chcp 65001
、スクリプトを実行する前に実行することもできます。これには問題がある可能性がありますが、多くの場合、効果的であり、多くの入力を必要としません(未満set PYTHONIOENCODING=utf_8
)。
setx PYTHONENCODING utf-8
タイピングを保存したい場合は、永続的にするようにしてください。