In einem C-Programm möchte ich eine Liste von gültigen UTF-8-codierten Zeichenfolgen in Unicode-Codepunkt-Reihenfolge sortieren. Keine Sortierung, keine Gebietskenntnis.Wird strcmp utf-8 Zeichenfolgen in Codepunkt-Reihenfolge vergleichen?
Also brauche ich eine Vergleichsfunktion. Es ist einfach genug, eine solche Funktion zu schreiben, die über die Unicode-Zeichen iteriert. (Ich bin zufällig zu GLib verwenden, so würde ich iterieren mit g_utf8_next_char
und die Rückgabewerte von g_utf8_next_char
vergleichen.)
Aber was ich frage mich, aus Neugier und möglicherweise Einfachheit und Effizienz, ist: Wird ein einfaches Byte -für-Byte strcmp
(oder g_strcmp
) tatsächlich die gleiche Arbeit? Ich denke, dass es, da UTF-8 encodes die höchstwertigen Bits zuerst, und ein Codepunkt, der Codierung in N + 1 Bytes benötigt, ein größeres Anfangsbyte als einen Codepunkt haben muss, der in N Bytes codiert werden muss.
Aber vielleicht fehlt mir etwas? Danke im Voraus.
Vielen Dank! Ich wollte meinem Anwendungsfall folgen und denke, dass der Vorbehalt nicht zutrifft, und dann sah ich, dass diese Information in [dem Standard] (http://www.w3.org/TR/xml- c14n # DocumentOrder) Ich versuche zu implementieren: "Lexikographischer Vergleich, der Strings vom kleinsten zum größten alphabetisch sortiert, basiert auf den UCS-Codepunktwerten, die äquivalent zu lexikographischer Ordnung basierend auf UTF-8 sind." ':-)' – skagedal