Umlaute, Linux und IDLE / Eric: noch mehr Seltsamkeiten
Verfasst: Sonntag 23. Juli 2006, 11:43
"Noch mehr": nach meinem besten Wissen und Gewissen hier im Forum so noch nicht dran gewesen. Wenn doch, habe ich dumm gesucht und bitte um Nachhilfe.
Alle Versuche unter SUSE Linux 10.0, zentral auf UTF-8 eingestellt.
1. Eric (habe die Version jetzt nicht greifbar, dürfte 3.8.xxx sein), im interaktiven Fenster:
Also ein gewöhnlicher Bytestring. Das Encoding bringe ich bisher nicht raus, weil Eric mir bei sys.stdout.encoding einen AttributeError an den Kopf wirft.
Jetzt soll daraus Unicode werden:
Keine Fehlermeldung, Ausgabe mit print wieder ok.
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 1-6: unsupported unicode code range.
Das kommt mir merkwürdig vor. Wenn ich es richtig interpretiere, heißt es doch, dass im Bereich 128-255 Werte vorkommen, denen in utf-8 kein Zeichen entspricht. Wieso denn das? Andere Werte als 'ü' würden mich ja nicht wundern.
2. IDLE:
sys.stdout.encoding ist 'utf-8'. Der obige Versuch ergibt bei st_utf einen String, der mit print richtig als 'Münster' ausgegeben wird, bei st_latin werden für das 'ü' zwei Zeichen ausgegeben. So weit ok.
Jetzt das Umgekehrte:
Jetzt wird s_utf mit print fehlerhaft ausgegeben, s_latin dagegen richtig. Erwartet hätte ich genau das Umgekehrte.
Unter Windows (dort sys.stdout.encoding = 'cp1252') alles wie erwartet.
Kann mir jemand auf die Sprünge helfen?
Alle Versuche unter SUSE Linux 10.0, zentral auf UTF-8 eingestellt.
1. Eric (habe die Version jetzt nicht greifbar, dürfte 3.8.xxx sein), im interaktiven Fenster:
Code: Alles auswählen
st = 'Münster'
Code: Alles auswählen
print st # ok, keine Fehlermeldung, das ü sieht richtig aus (wenn auch blässlich).
Code: Alles auswählen
st_latin = st.decode('latin-1')
Code: Alles auswählen
st_utf = st.decode('utf-8')
Das kommt mir merkwürdig vor. Wenn ich es richtig interpretiere, heißt es doch, dass im Bereich 128-255 Werte vorkommen, denen in utf-8 kein Zeichen entspricht. Wieso denn das? Andere Werte als 'ü' würden mich ja nicht wundern.
2. IDLE:
sys.stdout.encoding ist 'utf-8'. Der obige Versuch ergibt bei st_utf einen String, der mit print richtig als 'Münster' ausgegeben wird, bei st_latin werden für das 'ü' zwei Zeichen ausgegeben. So weit ok.
Jetzt das Umgekehrte:
Code: Alles auswählen
uu = u'Köln'
s_utf = uu.encode('utf-8')
s_latin = uu.encode('latin-1')
Unter Windows (dort sys.stdout.encoding = 'cp1252') alles wie erwartet.
Kann mir jemand auf die Sprünge helfen?