Provided by:
manpages-it_2.80-3_all 
NOME
UTF-8 - una codifica Unicode multi-byte ASCII-compatibile
DESCRIZIONE
L'insieme di caratteri Unicode 3.0 occupa uno spazio a 16 bit. La
codifica piu naturale di Unicode (nota come UCS-2) consta di sequenze
di parole a 16 bit. Queste stringhe possono contenere byte come '\0' o
'/', che hanno 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, non sa leggere parole a 16 bit come
caratteri senza grosse modifiche. Per queste ragioni UCS-2 non e una
codifica esterna di Unicode adatta a nomi di file, file di testo,
variabili d'amiente, ecc. L' Insieme universale di caratteri ISO 10646
(UCS), 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 e il modo
comune nel quale Unicode e usato nei sistemi operativi tipo Unix.
Propriet`a
La codifica UTF-8 possiede queste ottime proprieta:
* i caratteri UCS da 0x00000000 a 0x0000007f (i caratteri US-ASCII
classici) sono codificati semplicemente come byte da 0x00 a 0x7f
(compatibilita 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
preservato.
* 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 e 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, tuttavia lo standard Unicode non specifica caratteri oltre
0x10ffff, cosi i caratteri Unicode possono essere lunghi solo fino a
quattro byte in UTF-8.
Codifica
Le seguenti sequenze di byte vengono usate per rappresentare un
carattere. La sequenza da usare 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 piu
breve delle sequenze multi-byte che possono rappresentare il numero del
codice.
I valori del codice UCS 0xd800-0xdfff (surrogati UTF-16), cosi come
0xfffe e 0xffff (non-caratteri UCS) non devono apparire nei flussi
UTF-8 conformi.
Esempi
Il carattere Unicode 0xa9 = 1010 1001 (il simbolo di copyright (C)) 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
Note sull'applicazione
Gli utenti devono selezionare una localizzazione UTF-8 , ad esempio con
export LANG=en_GB.UTF-8
per poter attivare il supporto UTF-8 nelle applicazioni.
I software applicativi che devono riconoscere la dofica caratteri usata
devono sempre impostare la localizzazione con, ad esempio,
setlocale(LC_CTYPE, "")
e i programmatori possono quindi testare l'espressione
strcmp(nl_langinfo(CODESET), "UTF-8") == 0
per determinare se una localizzazione UTF-8 e stata selezionata e se
quindi tutti gli input e output standard in testo, comunicazioni
terminale, contenuto in testo dei file, nomi file e variabili
d'ambiente sono codificati in UTF-8.
I programmatori abituati alle codifiche a singolo byte come US-ASCII o
ISO 8859 devono ricordare che due assunzioni valide qui non sono piu
valide nelle localizzazioni UTF-8 . Innanzitutto un singolo byte non
corrisponde necessariamente piu ad un singolo carattere. In secondo
luogo, poiche i moderni emulatori terminale in modalita UTF-8
supportano anche caratteri a doppia larghezza cinese, giapponese e
coreano e i caratteri combinanti, non spaziati, l'emissione di un
singolo carattere non avanza necessariamente il cursore di una
posizione come avveniva in ASCII. Funzioni di libreria come
mbsrtowcs(3) e wcswidth(3) oggi devono essere usate posizioni di
caratteri e cursore.
La sequenza ufficiale ESC per commutare da uno schema di codifica ISO
2022 (usato ad esempio dai terminali VT100) a UTF-8 e ESC % G
("\x1b%G"). La corrispondente sequenza di ritorno da UTF-8 a ISO 2022 e
ESC % @ ("\x1b%@"). Altre sequenze ISO 2022 (come quelle per commutare
gli insiemi G0 e G1) non sono applicabili in modalita UTF-8.
Si puo sperare che nel futuro UTF-8 sostituira ASCII e ISO 8859 a tutti
i livelli come codifica caratteri comune nei sistemi POSIX, portando
cosi ad un ambiente significativamente piu ricco per la gestione del
testo.
Sicurezza
Gli standard Unicode and UCS richiedono che i produttori di UTF-8
debbano usare la forma piu breve possibile, ad es. produrre una
sequenza a due byte con primo byte 0xc0 non e conforme. Unicode 3.1 ha
aggiunto la richiesta che i programmi confori non debbano accettare le
forme non brevi nel loro input. Cio e per ragioni di sicurezza: se
l'input utente e verificato per possibili violazioni di sicurezza, un
programma puo verificare solo la versione ASCII di "/../" o ";" o NUL e
dimenticare che ci sono motli modi non-ASCII di rappresentare queste
cose in una codifica UTF-8 non breve.
Standard
ISO/IEC 10646-1:2000, Unicode 3.1, RFC 2279, Plan 9.
AUTORE
Markus Kuhn <mgk25@cl.cam.ac.uk>
VEDERE ANCHE
nl_langinfo(3), setlocale(3), charsets(7), unicode(7)