È noto che utf-8 funziona in modo ottimale per lo storage di file e il trasporto di rete. Ma la gente discute se utf-16/32 sono migliori per l'elaborazione. Un argomento importante è che utf-16 è ancora di lunghezza variabile e anche utf-32 non è ancora un punto di codice per carattere, quindi come sono meglio di utf-8? La mia opinione è che utf-16 è un ottimo compromesso.
In primo luogo, i caratteri fuori lato di BMP che necessitano di punti di doppio codice in utf-16 sono estremamente usati raramente. I personaggi cinesi (anche alcuni altri personaggi asiatici) in quell'intervallo sono fondamentalmente morti. Le persone normali non le useranno affatto, eccetto che gli esperti le usino per digitalizzare libri antichi. Quindi, utf-32 sarà una perdita la maggior parte del tempo. Non preoccuparti troppo di quei personaggi, in quanto non renderanno il tuo software in cattiva luce se non li gestisci correttamente, purché il tuo software non sia adatto a quegli utenti speciali.
In secondo luogo, spesso è necessario che l'allocazione della memoria delle stringhe sia correlata al conteggio dei caratteri. per esempio. una colonna di stringhe di database per 10 caratteri (supponendo di memorizzare una stringa unicode in formato normalizzato), che sarà di 20 byte per utf-16. Nella maggior parte dei casi funzionerà proprio così, tranne che in casi estremi conterrà solo 5-8 caratteri. Ma per utf-8, la lunghezza di byte comune di un carattere è 1-3 per le lingue occidentali e 3-5 per le lingue asiatiche. Il che significa che abbiamo bisogno di 10-50 byte anche per i casi comuni. Più dati, più elaborazione.
Per i protocolli esistenti che non supportano UTF-8, questa è una buona ragione per non usare UTF-8 :) Personalmente mi piace solo supportare la codifica UTF-8 in quanto consente di caratteri unicode pur permettendo alla mia vita di ruotare attorno al ASCII character-space (l'apertura del contenuto di UTF-16 in un editor "stupido" mi fa sanguinare gli occhi). –
@pst: B e c a u s i o o k s i i k i t h i s? – dan04