[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