[Python-de] Was sein sollte
Walter Dörwald
walter at livinglogic.de
Fre Jan 2 17:44:49 CET 2004
kgm wrote:
> Hi Martin,
>
>> Nenne einen Hashalgorithmus, der als Parameter das encoding
>
> bevor ich nach einen umöglichen Algorithmus suche, hätte ich mich eher
> an die Empfehlungen von unicode.org gehalten ;-)
>
> Programs should always compare canonical-equivalent Unicode strings as
> equal. One of the easiest ways to do this is to use a normalized form
> for the strings: if strings are transformed into their normalized forms,
> then canonical-equivalent ones will also have precisely the same binary
> representation.
Das bezieht sich aber auf was ganz anderes, nämlich die Tatsache, daß
es bei zusammengesetzten Zeichen (wie z.B. Umlauten) (manchmal) zwei
Möglichkeiten gibt, diese in Unicode darzustellen.
1) Als vorgefertiges Zeichen (z.B. ü als U+00fc)
2) Als Basiszeichen gefolgt vom Accent-Zeichen (dem sogenannten
"Non-spacing mark", also ein Zeichen, das selber keinen Platz
braucht, aber das vorherigen Zeichen überlappt, bzw. modifiziert)
(das ü als U+0075 U+0308)
BTW, zum Zerlegen und Zusammensetzen von zusammengesetzten Zeichen
gibts in Python 2.3 unicodedata.normalize:
>>> import unicodedata
>>> unicodedata.normalize("NFD", u"ü")
u'u\u0308'
>>> unicodedata.normalize("NFC", u"u\u0308")
u'\xfc'
Mit Encoding hat das ganze *überhaupt nix* zu tun.
Bis demnächst,
Walter Dörwald