UTF-8(7)

NOME
UTF-8 - una codifica Unicode multi-byte ASCII-compatibile

DESCRIZIONE
L'insieme di caratteri Unicode occupa uno spazio a 16 bit. La codifica più naturale di Unicode (nota come UCS-2) consta di sequenze di parole a 16 bit. Queste stringhe possono contenere byte come '\0' o '/', con il loro significato speciale per i nomi di file e per i parametri di altre funzioni della libreria C, come parte di un carattere a 16 bit. Inoltre, la maggioranza dei programmi UNIX si aspetta nomi di file in ASCII e, senza grosse modifiche, non saprebbe leggere parole a 16 bit. Per queste ragioni, l' UCS-2 non è una codifica esterna di Unicode adatta a nomi di file, file di testo, variabili ambientali, ecc. L' Insieme universale di caratteri ISO 10646 (Universal Character Set), un'estensione di Unicode, occupa addirittura uno spazio a 31 bit, e la sua codifica naturale, UCS-4 (una sequenza di parole a 32 bit), soffre degli stessi problemi. La codifica UTF-8 di Unicode e UCS evita questi problemi, ed è il modo migliore per implementare Unicode in un sistema operativo Unix-esco.

PROPRIETÀ
La codifica UTF-8 possiede queste ottime proprietà:

*   i caratteri UCS da 0x00000000 a 0x0000007f (i caratteri US-ASCII classici) sono codificati semplicemente come byte da 0x00 a 0x7f (compatibilità ASCII). In altre parole, file e stringhe contenenti solamente caratteri ASCII a 7 bit hanno la stessa codifica sia in ASCII che in UTF-8.

*   Tutti i caratteri UCS > 0x7f sono codificati come una sequenza a multi-byte consistente esclusivamente di byte nell'intervallo da 0x80 a 0xfd, in modo tale da non trovare nessun byte ASCII all'interno di un altro carattere, e da non avere problemi con, tra gli altri, '\0' o '/'.

*   L'ordinamento lessicografico delle stringhe in UCS-4 viene strettamente mantenuto.

*   Tutti i 2^31 possibili codici UCS possono essere codificati con UTF-8.

*   I byte 0xfe e 0xff non sono mai usati nella codifica UTF-8.

*   Il primo byte di una sequenza multi-byte UCS che rappresenta un carattere non ASCII è sempre nell'intervallo da 0xc0 a 0xfd e indica la lunghezza della sequenza. Tutti i byte seguenti sono nell'intervallo da 0x80 a 0xbf, facilitando un'eventuale risincronizzazione e facendo diventare la codifica senza memoria e resistente a byte mancanti.

*   I caratteri UCS codificati con UTF-8 possono arrivare ai sei byte di lunghezza, mentre quelli Unicode arrivano solo a tre. Poiché Linux usa solo il sottoinsieme Unicode a 16 bit di UCS, le sequenze multi-byte UTF-8 possono essere lunghe solo uno, due o tre byte in Linux.

CODIFICA
Le seguenti sequenze di byte vengono usate per rappresentare un carattere. La sequenza da usarsi dipende dal numero del codice UCS del carattere:

0x00000000 - 0x0000007F:
    0xxxxxxx

0x00000080 - 0x000007FF:
    110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF:
    1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF:
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0x00200000 - 0x03FFFFFF:
    111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF:
    1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Le configurazioni di bit xxx sono riempite coi bit del numero del codice carattere rappresentato in binario. Viene usata solo la più breve delle sequenze multi-byte che possono rappresentare il numero del codice.

ESEMPI
Il carattere Unicode 0xa9 = 1010 1001 (il simbolo di copyright ©) si codifica in UTF-8 come

    11000010 10101001 = 0xc2 0xa9

e il carattere 0x2260 = 0010 0010 0110 0000 (il simbolo «non uguale») si codifica come:

    11100010 10001001 10100000 = 0xe2 0x89 0xa0

STANDARD
ISO 10646, Unicode 1.1, XPG4, Plan 9.

AUTORE
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

VEDERE ANCHE
unicode(7)