Tim Tepaße: Unicode Sortierung

Beitrag lesen

ein ö kannst du durch ein o und ein ¨ erzeugen. Ein Editor normalisiert on the fly. ¨ + o ergeben ö . Das ist als normalisierung bekannt.

Jain. ¨ ist ein combining character – die verbinden sich automatisch mit dem vorhergehenden Unicode-Charakter, das ist noch nicht wirklich Normalisierung auf Charakterbasis, da setzen sich einfach zwei Zeichen zu einem Glyph zusammen. Es sei denn der Editor verändert auch seinen Speicher.

Wenn ich nun die Normalisierung Rückgängig machen kann, dann kann ich den ersten teil einem Wurzelbuchstaben zuordnen

Unicode definiert vier Normalisierungsalgorithmen, NFC, NFD, NFKC und NFKD. Bei den C-Formen werden kombinierende Zeichenfolgen zu einem Zeichen zusammengefasst, wenn es dafür ein passendes Zeichen ist. Die D-Formen dekomponieren dagegen, danach bist Du auf der Suche. Du musst noch entscheiden, ob Du eventuell die K-Form haben möchtest, die normalisiert manche Zeichen auch nach definierter Kompabilität, die mehr eine Ähnlichkeit ist, z.B. eine ² zu einer 2. Ich kann mir vorstellen, dass das für einen Sortieralgorithmus sowohl praktisch als auch unpraktisch sein kann.

Für Perl gibt es bestimmt eine Implementierung für NF(K)D, ansonsten ist der in Anhang 15 definierte Algorithmus kein Hexenwerk. Ich hab den mal in JS für einen ähnlichen Fall wie den Deinen implementiert, um Akzente zu normalisieren. Das nervigste sind die Tabellen, die man sich aus den Unicode Character Database rausfischen muss.