Update: Python 3.6 implementiert PEP 528: Ändern der Windows-Konsolencodierung in UTF-8 : Die Standardkonsole unter Windows akzeptiert jetzt alle Unicode-Zeichen. Intern verwendet es dieselbe Unicode-API wie das win-unicode-console
unten erwähnte Paket . print(unicode_string)
sollte jetzt einfach funktionieren.
Ich bekomme eine UnicodeEncodeError: 'charmap' codec can't encode character...
Fehlermeldung.
Der Fehler bedeutet, dass Unicode-Zeichen, die Sie drucken möchten, nicht mit der aktuellen ( chcp
) Konsolenzeichencodierung dargestellt werden können. Die Codepage ist oft eine 8-Bit-Codierung wie zcp437
, die nur ~ 0x100 Zeichen von ~ 1M Unicode-Zeichen darstellen kann:
>>> u "\ N {EURO SIGN}". encode ('cp437')
Traceback (letzter Anruf zuletzt):
...
UnicodeEncodeError: Der Codec 'charmap' kann das Zeichen '\ u20ac' an Position 0 nicht codieren:
Charakterkarten zu
Ich gehe davon aus, dass die Windows-Konsole keine Nur-Unicode-Zeichen akzeptiert. Was ist der beste Weg, um das zu umgehen?
Die Windows-Konsole akzeptiert Unicode-Zeichen und kann sie sogar anzeigen (nur BMP), wenn die entsprechende Schriftart konfiguriert ist . WriteConsoleW()
Die API sollte wie in der Antwort von @Daira Hopwood vorgeschlagen verwendet werden . Es kann transparent aufgerufen werden, dh Sie müssen und sollten Ihre Skripte nicht ändern, wenn Sie das win-unicode-console
Paket verwenden :
T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py
Siehe Was ist mit Python 3.4, Unicode, verschiedenen Sprachen und Windows los?
Gibt es eine Möglichkeit, Python automatisch drucken zu lassen, ?
anstatt in dieser Situation zu scheitern?
Wenn es ?
in Ihrem Fall ausreicht, alle nicht codierbaren Zeichen durch zu ersetzen, können Sie envvar PYTHONIOENCODING
festlegen :
T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]
In Python 3.6+ wird die von PYTHONIOENCODING
envvar angegebene Codierung für interaktive Konsolenpuffer ignoriert, es sei denn, PYTHONLEGACYWINDOWSIOENCODING
envvar ist auf eine nicht leere Zeichenfolge festgelegt.