In un programma C, desidero ordinare un elenco di stringhe con codifica UTF-8 valida nell'ordine Unicode code point. Nessuna collazione, nessuna consapevolezza della localizzazione.Will strcmp confronta le stringhe utf-8 nell'ordine del codice?
Quindi ho bisogno di una funzione di confronto. È abbastanza facile scrivere una funzione simile che itera sui caratteri Unicode. (Mi capita di essere utilizzando GLib, quindi mi piacerebbe iterare con g_utf8_next_char
e confrontare i valori di ritorno di g_utf8_next_char
.)
Ma quello che mi chiedo, per curiosità e, eventualmente, semplicità ed efficienza, è: sarà un semplice byte -per-byte strcmp
(o g_strcmp
) effettivamente fare lo stesso lavoro? Sto pensando che, dal momento che UTF-8 encodes i bit più significativi per primi, e un punto di codice che ha bisogno di codifica in N + 1 byte avrà un byte iniziale più grande di un punto di codice che deve essere codificato in N byte.
Ma forse mi manca qualcosa? Grazie in anticipo.
Grazie mille! Stavo per seguire il mio caso d'uso e come non penso che l'avvertenza si applichi, e poi ho visto che questa informazione è proprio lì [nello standard] (http://www.w3.org/TR/xml- c14n # DocumentOrder) Sto cercando di implementare: "Il confronto lessicografico, che ordina le stringhe dal meno al massimo in ordine alfabetico, si basa sui valori dei punti di codice UCS, che è equivalente all'ordine lessicografico basato su UTF-8." '' :-) – skagedal