1.3.6 ISO 8859-X, Unicode e UTF-8

Dall’insieme delle tabelle ASCII estese è nato lo standard ISO12 8859-1 (o Latin-1) che raccoglie in una tabella ASCII estesa i principali caratteri delle varie lingue, in modo tale che gli svedesi potessero scrivere “kn¨ackebr¨od” ed i danesi “rødgrød med fløde”. Tale standard non era sufficiente a soddisfare tutte le esigenze delle varie lingue, quindi sono nati altri standard, come ISO 8859-2 (per le lingue dell’europa centrale), KOI-8 (per la lingua russa), JIS (per la lingua giapponese), GB5 (per la lingua cinese), ...

L’utilizzo di varie tabelle di codifica delle informazioni alfanumeriche, porta a correre il rischio di perdere delle informazioni quando le stesse passano da un sistema all’altro. A tale scopo è nato un sistema di codifica detto Unicode13 che associa un valore univoco (espresso su più di un byte) ad ogni carattere, indipendentemente dal sistema e dalla lingua utilizzata. Parallelamente, con lo standard ISO/IEC 10646-1 è stata definita una codifica numerica per ogni simbolo di ogni lingua, l’UCS (Universal Character Set), che ha essenzialmente la stessa codifica di Unicode. Unicode è supportato da molti sistemi operativi, da tutti i più moderni web browser e da molti altri prodotti.

Poiché la codifica Unicode non è molto agevole da utilizzare così com’è definita, a causa del fatto che molte delle routine già scritte si troverebbero ad avere a che fare con un elevato numero di byte nulli14 (specialmente per i simboli la cui codifica è rappresentabile per mezzo di un solo byte significativo), è stata definita la codifica UTF-8 (Unicode Transformation Format-8), come descritto nella norma ISO 10646-1:2000 Annex D e nella RFC 2279. Si tratta di una codifica che associa ad ogni carattere un numero di byte variabile da 1 fino a 6, dipendentemente dalla codifica dello stesso secondo l’Unicode di base (v. tab. 1.5)15: essa codifica ulteriormente le coppie di byte che rappresentano i caratteri alfanumerici, in maniera tale da non far risultare byte nulli, tranne nel caso in cui il carattere da codificare sia proprio il carattere NUL. UTF-8 è stata definita in modo che i caratteri ASCII standard (00 H - 7FH) vengono codificati su un solo byte ed assumono i valori previsti dalla codifica ASCII (v. tab. 1.3). Quindi tale codifica è trasparente per i caratteri ASCII standard.


Unicode------------|UTF--8 (binario)---------------------------------|
00000000H--0000007FH-|0XXXXXXX---------------------------------------|
00000080H -000007FFH |110XXXXX 10XXXXXX                               |
00000800H -0000FFFFH |1110XXXX 10XXXXXX 10XXXXXX                       |
00010000H -001FFFFFH |11110XXX 10XXXXXX 10XXXXXX 10XXXXXX               |
0004200000000000HH --070F3FFFFFFFFFFFHH |111111111101X0XX 1 100XXXXXXXXXXXX 1100XXXXXXXXXXXX 1010XXXXXXXXXXXX 1 100XXXXXXXXXXXX 10XXXXXX
-------------------------------------------------------------------

Tabella 1.5: Codifica dei caratteri secondo UTF-8.

Ad esempio, il simbolo del copyright (©), che secondo la codifica Unicode è rappresentato dal valore U-00A9H16 (= 00000000101010012), secondo la codifica UTF-8 è rappresentato come C2A9H (= 11000010101010012). Il carattere di disuguaglianza (/=), che secondo la codifica Unicode è rappresentato dal valore U-2260H (= 00100010011000002), secondo la codifica UTF-8 è rappresentato come E289A0H (= 1110001010001001101000002).

Per ulteriori informazioni si vedano anche le man page charset(7), ascii(7), iso_8859-1(7), unicode(7) e utf-8(7).