|
UTF-8(7) manual page
Table of Contents
UTF-8 - una codifica Unicode multi-byte ASCII-compatibile
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.
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.
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.
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
ISO 10646, Unicode 1.1, XPG4, Plan 9.
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
unicode(7)
Table of Contents
|