Sie können dies tun, indem Sie nicht auf die implizite Codierung verlassen, wenn die Dinge zu drucken. Sich darauf nicht zu verlassen, ist in jedem Fall eine gute Idee - die implizite Kodierung wird nur verwendet, wenn auf stdout gedruckt wird und wenn stdout mit einem Terminal verbunden ist.
Ein besserer Ansatz ist es, überall unicode
zu verwenden und codecs.open
oder codecs.getwriter
überall zu verwenden. Sie wickeln sys.stdout
in einem Objekt, das Ihre Unicode-Strings in UTF-8 automatisch, beispielsweise codiert:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
Dies funktioniert nur, wenn Sie Unicode überall verwenden, though. Also, benutze Unicode überall. Wirklich, überall.
Was ist mit Stdin? – duduklein
stdin wird nicht automatisch decodiert, Sie müssen dies also immer selbst tun. Und vorausgesetzt, die Eingabe ist UTF-8 ist wahrscheinlich eine schlechte Idee, aber es gibt 'codecs.getreader ('utf-8') (sys.stdin)' wenn Sie wirklich wollen. –
Beachten Sie, dass Python 3 im Gegensatz zu Python 2 automatisch stdin dekodiert: http://docs.python.org/3/library/sys.html#sys.stdin - dieses Verhalten kann wie in den Dokumenten beschrieben geändert werden. –