[Python-de] Unicode - Bläue (Umlaute mit Absicht im Header)

Gerson Kurz Gerson.Kurz at t-online.de
Wed Nov 6 20:32:44 EST 2002


Ich muß mich mal wieder mit Unicode rumärgern, wobei der Ärger einerseits
aus meiner zugegebenermaßen sehr oberflächlichen Kenntnis von Unicode
resultiert, andererseits aus dem Wetter.

Also. Ich habe "Strings", die von OLE (genauer Outlook) stammen. Die Strings
enthalten Umlaute - z.B. das Paradebeispiel "Persönliche Ordner". Ich möchte
die Datei so schreiben, daß mein Linux (genauer, mbox-basierte Mehler) die
Dateien lesen können. Die Outlook-Strings haben "<type 'unicode'>".

Meine
Oldskool-Lang-Lebe-Der-Amiga-1985-(Naturgemäß-nur-der-Amiga1000-mit-US-Tasta
tur-und-Kickstart1.3)-Zeichensatzkenntnisse sind: Bytes sind Bytes. Du
kannst die Bytes unter Windows wegschreiben, und unter Linux reinnudeln.
Wenn aus dem Byte ein "ü" wird, dann liegt das am Zeichensatz: im Prinzip
kann man sich 'ne Codepage sparen, wenn man den richtigen Font hat. Ein Byte
ist einfach nur eine Zahl.

Im März 2002 hatte ich schon mal was geschrieben, und auch meine
Unicode-Kenntnisse zusammengefasst, unter
<news:3c846d80.95456984 at news.isar.de> (oder Google Groups suche nach "Python
Unicode Blues"). Dank der damaligen Antworten von Martin von Loewis konnte
ich mir folgendes zusammenbasteln:

--------------------------------------------
self.fh = open(filename,"wb")
self.fh.write( codecs.BOM_LE )

def ist_es_nicht_grausam(schmarrn_elender):
    self.fh.write(schmarrn_elender.encode("utf-16le"))

ja_wirklich_es_ist_grausam = ist_es_nicht_grausam
...
ja_wirklich_es_ist_grausam( string_den_ich_von_outlook_bekam )
...
self.fh.close()
--------------------------------------------

Prima, funktioniert einwandfrei.

Frage 1: Warum muß ich den "<type 'unicode'>" noch mal als Unicode encoden?
Der Laie würde sagen das ist doch redundant?

Frage 2: Angenommen, ich möchte im String "<" durch "&lt;" ersetzen.

Möglichkeit a)

	schmarrn_elender = str(schmarrn_elender).replace("&","&lt;")

Möglichkeit b)

      schmarrn_elender = cgi.escape(schmarrn_elender)

Beide Möglichkeiten werfen wunderprächtige Exceptions, wenn der prima tolle
Unicodestring Umlaute enthält ;( - die beliebten Ordinal not in range
fehler; sind also eigentlich keine Möglichkeiten, wie wir Philosophen
meinen.

Frage 3: Angenommen, es ist mir egal, ob in China geborene
Suaheliindianerdichterfürsten Mundartpoeme von Win nach Lin exportieren
können - ich möchte einfach ein "ö" 8-bit abspeichern, und 8-bit unter Linux
einlesen, unter der Voraussetzung gleiche Codepage. Das ist ja z.B. der
Fall, wenn ich mit dem popeligen Notepad ein "ö" speichere. Es kann also
nicht völlig jenseits des Menschenmöglichen sein, oder? Zumal ja mbox AFAIK
auch ganz simples 8-Bit Dateiformat ist, und ich habe gehört, daß auch unter
Linux der eine oder andere schon mal Mehl mit Umlauten gelesen haben soll
(angeblich - ich mag mich irren).

Frage 4: Gibt es ein, äh, UNICODE-Tutorial? Nun ja, es gibt
http://www.reportlab.com/i18n/python_unicode_tutorial.html
(faszinierenderweise das erste Ergebnis, wenn man Google mit "Unicode
Tutorial" quält), welches aber nicht die diversen Formate *erklärt*, sondern
einfach nur Codeschnipsel hinwirft. Ich würde (nicht wirklich) das ganze mal
*verstehen*, das muß doch möglich sein?

Ach ja, mir ist entfernt bewusst, daß es sowas wie Mimeencoding von Umlauten
z.B. in Mailheadern gibt - (und ich hoffe auf ein entsprechendes
Püdong-Modul dazu), aber es geht z.B. auch um Verzeichnisse - ich würde
gerne die Vz-Struktur meines 2Gb-Outlook-pSts in "die neue Welt"
rüberretten, und zumindest KMail scheint das ja zu können.

Frage 5: btst #6,$bfe001
	   bne.s "Frage 5"

(Kleiner Scherz am Rande)






More information about the Python-de mailing list