Passa al contenuto principale

1. Introduzione

ISO/IEC 10646 [ISO.10646] definisce un ampio insieme di caratteri denominato Universal Character Set (UCS), che comprende la maggior parte dei sistemi di scrittura del mondo. Lo stesso insieme di caratteri è definito dallo standard Unicode [UNICODE], che definisce inoltre proprietà aggiuntive dei caratteri e altri dettagli applicativi di grande interesse per gli implementatori. Fino a oggi, le modifiche di Unicode e gli emendamenti e le aggiunte a ISO/IEC 10646 si sono seguiti a vicenda, cosicché i repertori di caratteri e le assegnazioni dei code point sono rimasti sincronizzati. I comitati di standardizzazione competenti si sono impegnati a mantenere questo utilissimo sincronismo.

Forme di codifica

ISO/IEC 10646 e Unicode definiscono diverse forme di codifica del loro repertorio comune:

  • UTF-8
  • UCS-2
  • UTF-16
  • UCS-4
  • UTF-32

In una forma di codifica, ogni carattere è rappresentato come una o più unità di codifica. Tutte le forme di codifica UCS standard, tranne UTF-8, hanno un'unità di codifica più grande di un ottetto, il che ne rende difficile l'uso in molte applicazioni e protocolli attuali che presuppongono caratteri a 8 o persino a 7 bit.

Caratteristiche di UTF-8

UTF-8, oggetto di questo memo, ha un'unità di codifica di un solo ottetto. Utilizza tutti i bit di un ottetto, ma ha la qualità di preservare l'intero intervallo US-ASCII [US-ASCII]:

  • I caratteri US-ASCII sono codificati in un ottetto avente il normale valore US-ASCII
  • Qualsiasi ottetto con tale valore può rappresentare solo un carattere US-ASCII e nient'altro

Proprietà della codifica UTF-8

UTF-8 codifica i caratteri UCS con un numero variabile di ottetti, dove il numero di ottetti e il valore di ciascuno dipendono dal valore intero assegnato al carattere in ISO/IEC 10646 (il numero del carattere, detto anche posizione di codice, code point o valore scalare Unicode).

Questa forma di codifica presenta le seguenti caratteristiche (tutti i valori sono in esadecimale):

✅ Compatibilità ASCII

I numeri di carattere da U+0000 a U+007F (repertorio US-ASCII) corrispondono agli ottetti da 00 a 7F (valori US-ASCII a 7 bit). Una conseguenza diretta è che una semplice stringa ASCII è anche una stringa UTF-8 valida.

✅ Nessuna ambiguità con ASCII

I valori di ottetto US-ASCII non compaiono in altri contesti all'interno di un flusso di caratteri codificato in UTF-8. Ciò garantisce la compatibilità con i file system o con altro software (ad esempio la funzione printf() nelle librerie C) che effettua il parsing sulla base dei valori US-ASCII ma è trasparente agli altri valori.

✅ Conversione semplice

La conversione di andata e ritorno tra UTF-8 e altre forme di codifica è semplice.

✅ Indicazione della lunghezza della sequenza

Il primo ottetto di una sequenza multi-ottetto indica il numero di ottetti della sequenza.

✅ Valori di byte vietati

I valori di ottetto C0, C1, da F5 a FF non compaiono mai.

✅ Riconoscimento dei confini di carattere

I confini tra caratteri si individuano facilmente a partire da qualsiasi punto di un flusso di ottetti.

✅ Conservazione dell'ordinamento

L'ordinamento lessicografico per valore di byte delle stringhe UTF-8 coincide con quello ottenuto ordinando per numero di carattere. Naturalmente ciò ha un interesse limitato, dato che un ordinamento basato sui numeri di carattere non è quasi mai culturalmente valido.

✅ Algoritmi di ricerca veloci

L'algoritmo di ricerca veloce di Boyer-Moore può essere utilizzato con dati UTF-8.

✅ Riconoscibilità

Le stringhe UTF-8 possono essere riconosciute come tali in modo abbastanza affidabile mediante un semplice algoritmo, ossia la probabilità che una stringa di caratteri in qualsiasi altra codifica risulti UTF-8 valido è bassa e diminuisce all'aumentare della lunghezza della stringa.

Storia di UTF-8

UTF-8 è stato ideato nel settembre 1992 da Ken Thompson, guidato dai criteri di progettazione specificati da Rob Pike, con l'obiettivo di definire un formato di trasformazione UCS utilizzabile nel sistema operativo Plan9 in modo non invasivo. Il progetto di Thompson è stato accompagnato lungo il processo di standardizzazione dall'X/Open Joint Internationalization Group XOJIG (si veda [FSS_UTF]), assumendo via via i nomi FSS-UTF (variante FSS/UTF), UTF-2 e infine UTF-8.


Collegamenti correlati