Unicode è un sistema di codifica che si propone di superare le limitazioni del codice ASCII e delle sue estensioni, assegnando un numero univoco ad ogni carattere usato per la scrittura di testi, in maniera indipendente dalla lingua, dalla piattaforma informatica e dal programma utilizzato. È stato compilato e viene aggiornato e pubblicizzato dall'Unicode Consortium, un consorzio internazionale di aziende interessate alla interoperabilità nel trattamento informatico dei testi in lingue diverse.
Unicode incorpora, nella primissima parte, la codifica ISO-1 (cioè, in pratica, i 256 caratteri del codice ASCII esteso per i caratteri latini), ma codifica anche i caratteri usati in quasi tutte le lingue vive e in alcune lingue morte, nonché simboli matematici e chimici, cartografici, l'alfabeto Braille, ideogrammi ecc. Attualmente non rappresenta ancora tutti i caratteri in uso nel mondo. Essendo ancora in evoluzione, si prefigge di coprire tutti i caratteri rappresentabili, garantendo la compatibilità e la non sovrapposizione con le codifiche dei caratteri già definiti, ma lasciando comunque dei ben precisi campi di codici "non usati", da riservare per la gestione autonoma all'interno di applicazioni particolari.
Unicode suddivide tutti i codici utilizzati in 17 gruppi detti piani (plane), numerati da 0 a 16. Ogni piano comprende al proprio interno 216 = 65.536 codici possibili, per un totale di 17 x 65.536 = 1.114.112 codici. Si tratta di un numero enorme di possibili caratteri e in effetti sono una minima parte dei codici è attualmente utilizzata. Infatti l'ultima versione pubblicata, Unicode 8.0 (2015), comprende in effetti "solo" 120,737 caratteri effettivamente codificati: la parte rimanente dei codici è destinata a futuri sviluppi.
La tabella qui sotto mostra la suddivisione in piani con i relativi codici Unicode (in esadecimale):
Piano | Codici | Nome |
0 | da 0 a 0FFFF | Basic Multilingual Plane |
1 | da 10000 a 1FFFF | Supplementary Multilingual Plane |
2 | da 20000 a 2FFFF | Supplementary Ideographic Plane |
3-13 | da 30000 a DFFFF | Attualmente non usati |
14 | da E0000 a EFFFF | Supplementary Special-purpose Plane |
15-16 | da F0000 a 10FFFF | Supplementary Private Use Area |
In base alla tabella precedente, il primo byte indica il piano (attualmente usati da 00 a 10), mentre i due byte rimanenti indicano il carattere all'interno del piano stesso.
In pratica i caratteri di quasi tutti gli alfabeti moderni e la maggior parte dei simboli non alfabetici, occupano il cosiddetto Basic Multilingual Plane, cioè la parte bassa dei codici Unicode, che va da 0 a FFFF. Gli altri piani sono utilizzati per caratteri meno frequenti o di lingue morte (per esempio i geroglifici egizi) o sono lasciati inutilizzati.
Per rappresentare il codice Unicode corrispondente a un determinato carattere, si è soliti premettere U+ al numero del codice. Per esempio U+220105 rappresenta l'ideogramma 𢀕. Come si può notare occorrono 6 cifre esadecimali per scrivere il codice Unicode di un qualsiasi carattere.
Tuttavia i caratteri più usati, quelli che appartengono al piano 0, possono essere scritti solo con 4 cifre esadecimali, cioè 2 Byte, perciò di solito si omettono le prime due cifre (uguali a 00 per tutti questi caratteri). Ad esempio, la lettera à (a accentata) corrisponde al codice Unicode esadecimale U+00E0 , mentre il codice U+0636 corrisponde alla lettera araba 'sad' (ض).
Per conoscere la rappresentazione di un qualsiasi carattere in una qualsiasi lingua, basta consultare l'apposita tabella dei caratteri Unicode in rete; scegliendo una lingua o un tipo di caratteri, si ottiene una tabella di questo tipo (l'esempio è tratto dalla tavola latin1):
Per conoscere il codice Unicode di un qualsiasi carattere basta incrociare il valore scritto in colonna con quello in riga o leggere direttamente il codice (esadecimale) riportato sotto il carattere stesso (per esempio, osservando la tabella in figura, il codice di ò è U+00F2).
Riassumendo, lo scopo di Unicode è:
Abbiamo detto che occorrono 6 cifre esadecimali per scrivere il codice Unicode di qualsiasi carattere, ovvero, usando la numerazione binaria, occorrerebbero 3 byte. Ma in realtà il codice Unicode non viene quasi mai usato, così com'è, per rappresentare un testo. La ragione è che "spreca" un sacco di spazio, perché assegna 3 byte a qualsiasi carattere, indipendentemente dalla sua frequenza. Così, tanto per fare un esempio, la lettera A verrebbe codificata con 3 byte esattamente come il geroglifico . Anzi, siccome per ragioni tecniche nei computer i byte sono normalmente raggruppati in numero pari, si dovrebbero usare 4 Byte per scrivere ogni carattere.
Abbiamo accennato prima al fatto che i caratteri di quasi tutte le lingue esistenti si possono scrivere con solo 4 cifre esadecimali (2 Byte), dal momento che le prime due cifre di tali codici sono sempre 00. Per questa ragione si può scrivere ad esempio U+00F2 per la ò accentata, invece del più scomodo U+0000F2.
Ma c'è di più: siccome i primi 256 caratteri del codice Unicode corrispondono in pratica al codice ASCII esteso della codifica ISO-1, basterebbero in realtà solo due cifre esadecimali (1 byte) per scrivere tutte le lettere usate dagli alfabeti latini (tali codici infatti iniziano tutti con quattro zeri 0000).
In pratica: Unicode è un elenco di tutti i possibili caratteri (si dice anche che è un set di caratteri). Tale set di caratteri deve essere trasformato però in una rappresentazione binaria più efficiente allo scopo di utilizzarlo nei computer. Tale trasformazione viene effettuata per mezzo di un algoritmo di codifica (detto anche code o encoding), cioè in pratica un metodo che trasforma ogni numero Unicode (detto anche code point) in un carattere binario.
Una codifica più efficiente e frequentemente usata è quella detta UTF-8. Si tratta di una codifica a lunghezza variabile che utilizza da 1 a 4 Byte per rappresentare tutti i caratteri Unicode.
I caratteri più frequenti (almeno nelle lingue latine) vengono scritti usando un solo byte e il loro codice coincide con la codifica ASCII. In pratica i caratteri da U+0000 fino a U+007F, cioè tutti quelli in cui il byte inizia con 0 (0XXX XXXX) sono i caratteri ASCII. In questo modo tutti i file codificati in ASCII sono compatibili con Unicode.
I caratteri da U+0080 a U+07FF sono codificati usando 2 byte (comprendono gli alfabeti Latino con diacritici, Greco, Cirillico, Copto, Armeno, Ebraico e Arabo), quelli da U+000800 a U+00FFFF 3 byte e infine quelli da U+010000 a U+10FFFF usano 4 byte, secondo lo schema seguente:
Intervallo Unicode | Byte usati | Byte 1 | Byte 2 | Byte 3 | Byte 4 | |
---|---|---|---|---|---|---|
U+00000000 | U+0000007F | 1 | 0xxxxxxx |
|||
U+00000080 | U+000007FF | 2 | 110xxxxx |
10xxxxxx |
||
U+00000800 | U+0000FFFF | 3 | 1110xxxx |
10xxxxxx |
10xxxxxx |
|
U+00010000 | U+001FFFFF | 4 | 11110xxx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
Il codice UTF-8 è congegnato in modo tale che, dato una sequenza di byte, è possibile interpretarne sempre correttamente il significato. Supponiamo per esempio di dover interpretare la sequenza binaria
1100 1001 1011 0001 0111 0010 (C9 A1 72)
Il primo byte della sequenza (1100 1001) inizia con 110
: dunque si tratta
di un carattere che appartiene al secondo gruppo. Per vedere di quale
carattere si tratta, dobbiamo guardare anche il secondo byte (1011 0001) che
inizia con 10. Il carattere corrispondente ai primi due byte della stringa
(1100 1001 1011 0001 = C9 A1) è 즡.
Il terzo byte (0111 0010 = 72) inizia con zero. Si tratta dunque di un carattere del primo gruppo e corrisponde alla lettera 'r'.
In generale il codice UTF-8 non coincide col codice Unicode: si tratta di due numeri diversi. Per esempio il carattere Ø ha un code point U+00D8, mentre in UTF-8 viene rappresentato con C3 98. Su internet sono disponibili tabelle di conversione che permettono di vedere la corrispondenza fra Unicode e UTF-8 e convertitori con i quali si può convertire qualsiasi code point in UTF-8 e viceversa.
Sito realizzato in base al template offerto da
http://www.graphixmania.it