W programie C, chcę posortować listę prawidłowych łańcuchów zakodowanych w formacie UTF-8 w kolejności kodów Unicode. Bez sortowania, bez świadomości lokalizacji.Czy strcmp porówna ciągi utf-8 w kolejności punktów kodowych?
Potrzebuję funkcji porównania. Łatwo jest napisać taką funkcję, która iteruje po znakach Unicode. (Zdarza mi się używać GLib, tak bym iteracyjne z g_utf8_next_char
i porównać wartości zwracanych z g_utf8_next_char
.)
Ale co zastanawiam się, z ciekawości i ewentualnie prostota i skuteczność, brzmi: czy prosty bajt -for-byte strcmp
(lub g_strcmp
) faktycznie wykonuje tę samą pracę? Myślę, że powinien on, ponieważ UTF-8 encodes najpierw najbardziej znaczące bity, a punkt kodowy, który wymaga kodowania w bajtach N + 1, będzie miał większy początkowy bajt niż punkt kodowy, który musi być zakodowany w N bajtów.
Ale może czegoś brakuje? Z góry dziękuję.
Wielkie dzięki! Miałem zamiar podjąć dalsze kroki w mojej sprawie użycia i jak nie sądzę, że zastrzeżenie ma zastosowanie, a następnie zobaczyłem, że ta informacja jest właśnie w [standardzie] (http://www.w3.org/TR/xml- c14n # DocumentOrder) Próbuję zaimplementować: "Porównanie Leksykograficzne, które zamienia łańcuchy od najmniejszego do największego alfabetycznie, opiera się na wartościach kodów współrzędnych UCS, co jest odpowiednikiem uporządkowania leksykograficznego opartego na UTF-8." ':-)' – skagedal