4 Stimmen

Behandelt die Druckfunktion von Python Unicode heute anders als zu der Zeit, als Dive Into Python geschrieben wurde?

Ich versuche, meinen Weg durch einige frustrierende Kodierungsprobleme zu arbeiten, indem ich zu den Grundlagen zurückkehre. In Dive Into Python Beispiel 9.14 ( aquí ) haben wir dies:

>>> s = u'La Pe\xf1a'
>>> print s
Traceback (innermost last): File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('latin-1')
La Peña

Aber auf meinem Rechner passiert das:

>>> sys.getdefaultencoding()
'ascii'
>>> s = u'La Pe\xf1a'
>>> print s
La Peña

Ich verstehe nicht, warum diese unterschiedlich sind. Ist jemand da?

6voto

Lukáš Lalinský Punkte 39243

Die Standardkodierung für print hängt nicht ab von sys.getdefaultencoding() sondern auf sys.stdout.encoding . Wenn Sie Python z. B. mit LANG=C oder ein Python-Skript in eine Datei umleiten, wird die Kodierung für stdout sein ANSI_X3.4-1968 . Andererseits, wenn sys.stdout ein Terminal ist, wird es die Kodierung des Terminals verwenden.

Zu erklären, was sys.getdefaultencoding() wird bei der impliziten Konvertierung von Strings von/nach Unicode verwendet. In diesem Beispiel, str(u'La Pe\xf1a') mit der Standard-ASCII-Kodierung würde fehlschlagen, aber mit der geänderten Standardkodierung würde es die Zeichenfolge in Latin-1 kodieren. Das Setzen der Standardkodierung ist jedoch eine schreckliche Idee, Sie sollten immer eine explizite Kodierung verwenden, wenn Sie von unicode a str .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X