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

M.-A. Lemburg mal at lemburg.com
Wed Nov 6 22:22:56 EST 2002


Gerson Kurz wrote:
> 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'>".
 >
 > ...

Wie wär's mit einer genauen Beschreibung dessen was hier eigentlich
erreicht werden soll ? Ein "funktioniert nicht" hilft nicht sonderlich
weiter...

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

Unicode ist eine abstrakte Beschreibung von Skripten. UTF-16 ist
lediglich eine Form deren Kodierung.

> 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.

Python nimmt per default an, daß Zeichen in
normalen Strings ASCII-kodiert sind. Umlaute gehören nicht
dazu. Alles andere als eine Exception, die ja schließlich zum
Nachdenken anregen soll, würde nur in Datenmüll resultieren.

Übrigens funktioniert u.replace(u"<", u"&lt;") ganz prima
mit Unicode string u... und das auch falls der Text in Sanskrit
gehalten ist :-)

> 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).

Wo ist hier die Frage ?

> 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?

http://www.unicode.org/ hält dort einiges bereit. Dieser Vortrag
könnte auch etwas weiterhelfen:

http://www.egenix.com/files/python/Unicode-EPC2002-Talk.pdf

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
_______________________________________________________________________
eGenix.com -- Makers of the Python mx Extensions: mxDateTime,mxODBC,...
Python Consulting:                               http://www.egenix.com/
Python Software:                    http://www.egenix.com/files/python/





More information about the Python-de mailing list