更新: Pythonの3.6実装PEP 528:UTF-8にエンコード変更Windowsコンソール:Windows上のデフォルトのコンソールは現在、すべてのUnicode文字を受け入れます。内部的には、下記のwin-unicode-console
パッケージと同じUnicode APIを使用しています。print(unicode_string)
今すぐ機能するはずです。
私が取得UnicodeEncodeError: 'charmap' codec can't encode character...
エラー。
エラーは、印刷しようとしているUnicode文字が、現在の(chcp
)コンソール文字エンコードを使用して表現できないことを意味します。コードページは、多くの場合、8ビットのエンコーディングでありcp437
、1MのUnicode文字から0x100文字までしか表現できません。
>>> u "\ N {ユーロ記号}"。encode( 'cp437')
トレースバック(最新の呼び出しが最後):
...
UnicodeEncodeError: 'charmap'コーデックは位置0の文字 '\ u20ac'をエンコードできません:
キャラクターマップ
これは、WindowsコンソールがUnicodeのみの文字を受け入れないためだと思います。これを回避する最良の方法は何ですか?
WindowsコンソールはUnicode文字を受け入れ、対応するフォントが設定されている場合は、それらを表示することもできます(BMPのみ)。@Daira Hopwoodの回答でWriteConsoleW()
提案されているように、APIを使用する必要があります。これは透過的に呼び出すことができます。つまり、win-unicode-console
packageを使用する場合、スクリプトを変更する必要はなく、変更する必要もありません。
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
参照のPython 3.4、ユニコード、異なる言語とWindowsとの契約は何?
?
この状況で失敗するのではなく、Pythonに自動的にを印刷させる方法はありますか?
すべてのエンコードできない文字を?
あなたのケースで置き換えるだけで十分な場合は、PYTHONIOENCODING
envvarを設定できます:
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
Python 3.6以降では、PYTHONIOENCODING
envvarがPYTHONLEGACYWINDOWSIOENCODING
空でない文字列に設定されていない限り、envvarで指定されたエンコーディングはインタラクティブコンソールバッファーでは無視されます。