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.
C Composing
D Decomposing
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.
Es ist vielleicht auch eine Frage der Datenmenge, welche Granulierung in der Sortierung überhaupt effektiv ist.
Mein Ziel ist auf jeden Fall, binäre sortierkey zu erstellen, damit die sortierung dann mit einem einfach cmp stattfinden 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.
Eben das habe ich befürchtet, dass ich da selbst Basteln muss.
Immerhin weiss ich jetzt, wonach ich suchen muss und dass ich mit meinem Anliegen nicht der erste bin.
Ach, ich möchte noch nachführen: Ein grund, warum ich nicht mit locale arbeiten möchte:
Ein locale kann ein Script in einen unsicheren Zustand versetzen, wenn man es nicht auf eng begrenzte Blocks anwendet. Ich sehe auch nicht wie man es mit -T sicher kombinieren kann. Und das locale kann manchmal auch gar nicht verändert werden. Aus diesem Grund hat ein Unicode basierter Ansatz hier seine Berechtigung.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische