UTF-8

codifica di caratteri Unicode

Template:Traduci Inglese

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.

UTF-8 Modificato

Motivazioni di UTF-8

Vantaggi

Svantaggi

Storia