Ich bin auf dem CMD in Windows 8 und ich habe die Codepage auf 65001 (chcp 65001
) festgelegt. Ich benutze Python 2.7.2 (ActivePython 2.7.2.5) und habe die Umgebungsvariable PYTHONSTARTUP auf "bootstrap.py" gesetzt.Warum bekomme ich IOErrors beim Schreiben von Unicode in den CMD? (Mit Codepage 65001)
bootstrap.py:
import codecs
codecs.register(
lambda name: name == 'cp65001' and codecs.lookup('UTF-8') or None
)
Das ist mir Druck ASCII läßt:
>>> print 'hello'
hello
>>> print u'hello'
hello
Aber die Fehler, die ich bekomme, wenn ich versuche, eine Unicode-Zeichenfolge mit Nicht-ASCII-Zeichen zu drucken, machen keine Sinn für mich. Hier versuche ich ein paar Zeichenketten enthalten Nordic Symbole zu drucken (I hinzugefügt, um die zusätzlichen Zeilenumbruch zwischen den Abzügen für Lesbarkeit):
>>> print u'æøå'
��øåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory
>>> print u'åndalsnes'
��ndalsnes
>>> print u'åndalsnesæ'
��ndalsnesæTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'Øst'
��st
>>> print u'uØst'
uØstTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'ØstÆØÅæøå'
��stÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
>>> print u'_ØstÆØÅæøå'
_ØstÆØÅæøåTraceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 22] Invalid argument
Wie sehen Sie es nicht immer einen Fehler aus (und nicht einmal erhöhen immer den gleichen Fehler), und die nordischen Symbole werden nur gelegentlich korrekt angezeigt.
Kann jemand dieses Verhalten erklären, oder mir wenigstens helfen, herauszufinden, wie man Unicode richtig auf den CMD druckt?
Dies ist eine Albtraumsituation. Und es wurde unzählige Male hier auf SO und anderswo diskutiert. Zum Beispiel: http://www.google.com/search?q=print+unicode+windows+console+python –
Die einfachste Lösung ist die Verwendung von Python 3.3, wenn Sie können. Es hat einen [cp65001 Codec] (http://docs.python.org/3/whatsnew/3.3.html#codecs). – eryksun
@PiotrDobrogost: Bitte beziehen Sie sich auf einen anderen Fall wie diesen, wenn Sie es finden können (und ** ** ** nicht bedeuten Unicode-Decodierungsfehler!) – Hubro