UTF-8
UTF-8 (Unicode Transformation F, 8 bit) è una codifica dei caratteri Unicode in sequenze di lunghezza variabile di byte, creata da Rob Pike e Ken Thompson. UTF-8 usa gruppi di byte per rappresentare i caratteri Unicode, ed è particolarmente utile per il trasferimento tramite sistemi di posta elettronica a 8-bit.
UTF-8 usa da 1 a 4 byte per rappresentare un carattere Unicode. Per esempio un solo byte è necessario per rappresentare i 128 caratteri dell'alfabeto ASCII, corrispondenti alle posizioni Unicode da U+0000 a U+007F.
Anche se può sembrare inefficiente rappresentare i simboli Unicode con 4 byte, UTF-8 permette ai sistemi legacy di trasmettere questo super-insieme dello standard ASCII. In più la compressione dei dati è ancora possibile indipendentemente dall'uso di UTF-8.
La IETF (Internet Engineering Task Force) richiede che tutti i protocolli Internet identifichino la codifica dei caratteri utilizzata, e che siano in grado di utilizzare almeno UTF-8.
Descrizione
UTF-8 è attualmente lo standard RFC 3629 (UTF-8, a transformation format of ISO 10646).
Brevemente, i bit che compongono un carattere Unicode vengono suddivisi in gruppi, che vengono poi ripartiti tra i bit meno significativi all'interno dei byte che formano la codifica UTF-8 del carattere.
I caratteri inferiori a 128dec vengono rappresentati con un singolo byte contenente il loro valore; essi corrispondono esattamente ai 128 caratteri ASCII.
In tutti gli altri casi sono necessari fino a 4 byte, ognuno di questi con il bit più significativo impostato a 1, in modo da distinguerli dalla rappresentazione dei caratteri inferiori a 128dec.
Intervallo Unicode esadecimale |
UTF-16 | UTF-8 binario |
Note |
000000 - 00007F | 00000000 0xxxxxxx | 0xxxxxxx | Caratteri equivalenti al codice ASCII; I byte iniziano con 0 |
000080 - 0007FF | 00000xxx xxxxxxxx | 110xxxxx 10xxxxxx | il primo byte inizia per 110 o 1110, il successivo(i) con 10 |
000800 - 00FFFF | xxxxxxxx xxxxxxxx | 1110xxxx 10xxxxxx 10xxxxxx | |
010000 - 10FFFF | 110110xx xxxxxxxx 110111xx xxxxxxxx |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | UTF-16 richiede l'uso di coppie surrogate; viene sottratto il valore esadecimale 0x10000, in modo che la sequenza dei bit non coincida con quella usata da UTF-8 |
Per esempio, il carattere alef (א), corrispondente all'Unicode 0x05D0, viene rappresentato in UTF-8 con questo procedimento:
- ricade nell'intervallo da 0x0080 a 0x07FF. Secondo la tabella verrà rappresentato con due byte. 110xxxxx 10xxxxxx.
- l'esadecimale 0x05D0 equivale al binario 101-1101-0000.
- gli undici bit vengono copiati in ordine nelle posizioni marcate con x. 110-10111 10-010000.
- il risultato finale è la coppia di byte 11010111 10010000, o in esadecimale 0xD7 0x90
Riassumendo, i primi 128 caratteri vengono rappresentati con un singolo byte. I successivi 1920 ne richiedono due, e comprendono gli alfabeti Latino con diacritici, Greco, Cirillico, Copto, Armeno, Ebraico e Arabo. I restanti caratteri UCS-2 hanno bisogno di tre byte, tutto il resto di quattro.