UTF 8

Chiedete a programmatori e sistemisti qual è l’unico set di caratteri degno di esistere e la maggior parte risponderà l’ASCII standard (quello vero, a 7 bit).

Purtroppo dobbiamo aver a che fare con chi paga il nostro lavoro, gli utenti, quindi 96 caratteri stampabili e 32 di controllo sono pochi.

Se Unicode risolve egregiamente il problema della mappatura di caratteri e simboli,  il problema di utilizzarlo in maniera nativa come codifica all’interno di una piattaforma è l’incredibile spreco di spazio (RAM, disco, banda di trasmissione).

Un testo “Hello World” (11 lettere) in ASCII (a 8 bit) occupa 11 byte, ma occuperebbe il doppio in Unicode-16 e il quadruplo in Unicode-32 (la codifica attuale di Unicode).

Una A maiuscola a 8 bit è 01000001, codificata in Unicode a 32 bit è 00000000000000000000000001000001

Il vero problema è che l’aumento di spazio non avrebbe, nella stragrande maggioranza dei casi, un corrispettivo aumento di funzionalità.

Inoltre, in alcuni sistemi una sequenza di 8 bit a zero, il carattere NULL, è considerato un terminatore di stringa, quindi la A a 32 bit Unicode non arriverebbe mai o non verrebbe mai visualizzata.

Due anni dopo la nascita del consorzio Unicode viene presentato al mondo UTF-8.

Lo scopo di UTF-8 è quello di rappresentare tutti i caratteri di Unicode utilizzando una codifica a lunghezza variabile senza mai avere una sequenza di 8 bit consecutivi a zero.

La codifica a lunghezza variabile è un espediente utilizzato spesso in informatica e non solo: il sistema di prefissi telefonici italiani si basa sulla codifica a lunghezza variabile: esistono i prefissi 02 e 06 ma nessun altro prefisso inizia con 02 o 06. Parimenti, esistono tanti prefissi che iniziano con 01 (Piemonte e Liguria), 03 (Lombardia e, per un certo periodo, i cellulari), 04 (Triveneto ed Emilia), ma nessun prefisso è esattamente 01, 03 o 04.

UTF-8 parte da ASCII: se deve essere rappresentato un carattere ASCII (da 0 a 127), si utilizzano 8 bit con il bit più alto a 0 e gli altri sette che rappresentano il carattere. Quindi la A resta 01000001.

Il passo successivo è utilizzare due byte codificati in un modo particolare per rappresentare valori fino a 11 bit in questo modo:

110xxxxx 10xxxxxx

Per rappresentare valori fino a 16 bit si utilizzano tre byte in questo formato:

1110xxxx 10xxxxxx 10xxxxxx

e così via fino ad arrivare alla rappresentazione di 31 bit:

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Come si può intuire, nella codifica UTF-8 l’ottavo bit è sempre a 1, a meno che non sia un byte che sta rappresentando uno dei primi 127 caratteri.

In ogni caso, l’inizio di un carattere può essere la sequenza 0xxxxxxx oppure 11xxxxxx, ogni altra sequenza indica la continuazione della codifica di un carattere.

Inoltre, in una codifica multibyte, nel primo byte di codifica il numero di bit a 1 partendo dal più alto prima di incontrare il primo zero indica il numero di byte che compongono la codifica.

Queste due semplici regole permettono di gestire in maniera molto efficace la scansione dei testi da parte dei programmi.

Nel novembre 2003 lo spazio di codifica di UTF-8 è stato limitato da RFC3629 a

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

rimuovendo la codifica c cinque sei byte per evitare problemi con la codifica UTF-16.

In questo momento UTF-8 è il metodo di codifica caratteri più utilizzato e lo resterà probabilmente finché qualcuno non troverà un sistema migliore, oppure quando 32 o 64 bit per carattere diventeranno una dimensione ragionevole per poter evitare codifiche a lunghezza variabile.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

6 pensieri riguardo “UTF 8”

  1. Non commento tecnicamente perché non ne ho le capacità, ma poter codificare più caratteri è a volte una bella comodità, a volte una necessità tipografica (che è il mio campo di lavoro).

    Già trovare dei font “fantasiosi” con tutti i diacritici per fare titoli/lettering multilingua in italiano, francese, tedesco, spagnolo è un mezzo dramma, ma a volte avere un campo caratteri esteso diventa addirittura uno strumento di democrazia e di conservazione e trasmissione della cultura di chi non appartiene alle culture dominanti.

    Per esempio:
    https://modelviewculture.com/pieces/i-can-text-you-a-pile-of-poo-but-i-cant-write-my-name
    (tl;dr: c’è chi ha scoperto che la sua lingua è stata codificata dopo le emoji, il titolo dice già tutto)

  2. Non sono sicuro al 100% che UTF-8 sia il piu` utilizzato. Non dimentichiamo che Windows usa UTF-16 e cosi` Java.
    UTF-8 e` comodo in occidente per la sua compattezza, gia` se ci muoviamo nell’est Europa la convenienza scema. In Asia poi UTF-16 e` la norma.

Spazio per un commento