2013-03-27 11 views
10

Sto lavorando all'internazionalizzazione di uno dei miei programmi per il lavoro. Sto cercando di usare la lungimiranza per evitare possibili problemi o rifare il processo lungo la strada.Quali lingue UTF-8 non supporta?

Vedo riferimenti per UTF-8, UTF-16 e UTF-32. La mia domanda è due parti:

  1. Quali lingue UTF-8 non sostegno?
  2. Quali vantaggi hanno UTF-16 e UTF-32 rispetto a UTF-8?

Se UTF-8 funziona per tutto, allora io sono curioso di sapere cosa il vantaggio di UTF-16 e UTF-32 sono (ad esempio speciali funzioni di ricerca in un database, etc) con l'intesa dovrebbe aiutarmi a finire la progettazione il mio programma (e le connessioni del database) correttamente. Grazie!

risposta

12

Tutti e tre sono solo modi diversi di rappresentare la stessa cosa, quindi non ci sono lingue supportate da una e non da un'altra.

A volte UTF-16 viene utilizzato da un sistema con cui è necessario interagire con, ad esempio, l'API di Windows utilizza UTF-16 in modo nativo.

In teoria, UTF-32 può rappresentare qualsiasi "carattere" in un singolo numero intero a 32 bit senza mai doverne utilizzare più di uno, mentre UTF-8 e UTF-16 devono utilizzare più di un 8 bit o Intero a 16 bit per farlo. Ma in pratica, con la combinazione e la non combinazione di varianti di alcuni codepoint, non è proprio vero.

Un vantaggio di UTF-8 rispetto agli altri è che se si verifica un errore per il quale si assume che il numero di interi a 8, 16 o 32 bit corrisponda rispettivamente al numero di punti di codifica, diventa ovvio più rapidamente con UTF-8 - qualcosa fallirà non appena si avrà un codice codificato non ASCII, mentre con UTF-16 il bug può passare inosservato.

Per rispondere alla tua prima domanda, ecco un elenco di script attualmente non supportate da Unicode: http://www.unicode.org/standard/unsupported.html

+0

Sapete se esistono vantaggi di database nell'utilizzo di un tipo rispetto all'altro? –

+1

UTF-8 è più compatto per il testo prevalentemente in inglese, quindi è probabile che le cose siano più veloci. Non dovresti trovare funzionalità di database disponibili con una codifica e non un'altra. – RichieHindle

7

UTF8 è variabile da 1 a 4 byte, UTF16 2 o 4 byte, UTF-32 è fisso 4 byte.

Ecco perché UTF-8 ha un vantaggio in cui ASCII sono i caratteri più diffusi, UTF-16 è migliore dove ASCII non è predominante, UTF-32 coprirà tutti i possibili caratteri in 4 byte.

+0

La maggior parte delle nostre vendite sarà dagli Stati Uniti, quindi questo sarà il nostro obiettivo principale ... ad es. Voglio velocità. Quindi, sulla base di questo, presumo tu sia d'accordo che UTF-8 sarebbe la scelta migliore per me? –

+1

Hai ragione, in questo caso prenderei UTF-8. – duDE

+1

Quindi UTF-8 non occupa mai più spazio di UTF-16 e UTF-16 non occupa mai più spazio di UTF-32; inoltre UTF-8 è più veloce e di solito meno spazioso con stringhe prevalentemente in stile ASCII rispetto agli altri due nel suo insieme, sebbene gli altri due nel loro insieme siano più veloci di UTF-8 quando si tratta di stringhe principalmente non in stile ASCII. È corretto? Qual è il compromesso tra UTF-16 e UTF-32? – Panzercrisis