Che cos’è Unicode? Definizione e spiegazione
La nascita di linguaggi permette la trasmissione di conoscenza e la sua conservazione di generazione in generazione. Lo sviluppo della scrittura ha semplificato ulteriormente questo passaggio di conoscenza.
Molti dei sistemi di scrittura usati oggigiorno hanno migliaia di anni. A confronto, il testo in formato digitale è piuttosto recente. Inizialmente, la sua riproduzione era orientata verso la lingua inglese. Da allora una parte considerevole delle interazioni umane ha iniziato ad avere luogo nelle reti globali digitali. Le persone si scambiano informazioni superando i confini linguistici e geografici. Questo cambiamento ha portato a un ripensamento e al successivo sviluppo di una struttura unitaria per lo scambio di testi di diversi sistemi di scrittura e dei vari caratteri. Allo stesso tempo, il progresso tecnologico ha aperto nuove possibilità per la riproduzione dei caratteri.
Un esempio chiaro: pensate alle tanto usate emoji sul vostro smartphone. Potete usare queste icone colorate grazie a un’apposita tastiera, come fossero lettere, quasi come facessero parte dell’alfabeto. Ma come funziona? La risposta sta nello standard Unicode.
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
Che cos’è Unicode?
Unicode corrisponde a un sistema di codifica universale dei caratteri. Il termine deriva dall’inglese “Universal Character Encoding”. Si tratta di uno standard per la codifica dei caratteri scritto in rappresentazione binaria, che permette di salvare ed elaborare i testi con sistemi digitali.
Unicode rappresenta una novità in quanto non è legato ai formati e alle codifiche di un singolo alfabeto di una lingua umana. Unicode è stato ideato con l’obiettivo di servire da standard uniforme per la riproduzione di tutti i sistemi di scrittura sviluppati dagli uomini e dei rispettivi caratteri.
Dalla pubblicazione di Unicode 1.0 alla fine del 1991, lo standard ha raggiunto quello che era lo scopo iniziale. Oggi browser e sistemi operativi usano internamente Unicode come formato uniforme. La versione 13.0, rilasciata nel 2020 da Unicode Consortium, ha riassunto il repertorio dello standard Unicode composto da un totale di 143.859 caratteri.
Unicode Consortium è un’organizzazione senza scopo di lucro con sede in California che promuove il continuo sviluppo dello standard. Tra i membri del consorzio si annoverano imprese tecnologiche di primissimo livello come Adobe, Apple, Facebook, Google, IBM, Microsoft, Netflix e SAP. Il set di caratteri corrispondenti allo standard Unicode coincide esattamente con quello dello Universal Coded Character Set (UCS), contenuto nella norma internazionale ISO/IEC 10646.
Base tecnologica per la codifica dei caratteri
La scrittura e i testi sono onnipresenti nella vita dell’uomo moderno. Leggere e scrivere fanno parte delle prime capacità culturali che una persona impara a scuola. Non sorprende dunque che tante persone diano per assodata la presenza della scrittura digitale. Ma come funziona la riproduzione degli scritti da un punto di vista tecnico? Scoprite con noi il mondo della codifica testuale digitale.
Per prima cosa è importante comprendere che tutte le informazioni presenti in un sistema digitale si basano su una catena infinita di zeri e uno: la rappresentazione binaria. Il codice binario assomiglia per certi versi a un alfabeto, ma si compone soltanto di due “lettere”, appunto zero e uno. Ogni posizione all’interno di una sequenza composta da zeri e uno si definisce “bit”.
Il trucco della tecnologia dell’informazione sta nel comporre i caratteri dei vari alfabeti come sequenze di zeri e uno. In questo modo si riescono a codificare sia i numeri che le lettere, ma anche a distinguere tra tutti gli altri stati. Generalmente si parla di simboli. Più lunga è la sequenza di zeri e uno per la rappresentazione di un singolo simbolo, più simboli si possono riprodurre. Con l’aggiunta di ogni bit raddoppia il numero dei simboli possibili.
Un esempio concreto: immaginatevi di avere delle “parole” binarie della lunghezza di due bit. Queste permettono di codificare quattro numeri:
Parola di 2 bit | Numero |
00 | 0 |
01 | 1 |
10 | 2 |
11 | 3 |
Aggiungendo un ulteriore bit all’inizio della sequenza, raddoppia il numero delle possibili parole. Queste si compongono delle sequenze di bit già menzionate, con l’aggiunta di un uno o uno zero davanti. In questo modo possiamo codificare otto numeri:
Parola di 3 bit | Numero |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Una parola di 8 bit viene definita ottetto o byte.
Per motivi di semplicità abbiamo deciso di mostrarvi la codifica dei numeri. Lo stesso principio trova però utilizzo nei sistemi digitali anche per la codifica di lettere o di qualsiasi altro simbolo o stato. Di seguito proponiamo l’esempio molto semplificato di un codice binario di lettere:
Parola di 3 bit | Lettera |
000 | A |
001 | B |
010 | C |
Fate attenzione che la spiegazione fin qui non tiene in considerazione il tipo di font utilizzato. Infatti, qui parliamo solamente del modello interno su cui si basa la riproduzione digitale dei caratteri. La rappresentazione grafica di un carattere prende il nome di glifo.
In base al font usato ci sono diversi glifi per lo stesso carattere. Addirittura, uno stesso font può contenere più varianti per uno stesso glifo. Per esempio, pensate a diversi pesi, legature e corsivi. Di seguito trovate una rappresentazione avanzata che riassume la corrispondenza di caratteri e glifi:
Rappresentazione binaria | Numero decimale | Carattere codificato | Glifo |
---|---|---|---|
1000001 | 65 | “A“ maiuscola dell’alfabeto latino | A |
1100001 | 97 | “a“ minuscola dell’alfabeto latino | a |
0110000 | 48 | Cifra araba “0” | 0 |
0111001 | 57 | Cifra araba “9” | 9 |
11001000 | 200 | “È” maiuscola | È |
11101000 | 232 | “è” minuscola | è |
Terminologia della codifica dei caratteri
La codifica digitale dei caratteri comprende una serie di concetti specifici. L’uso dei vari termini ha un uso simile in italiano. Per poter dare una definizione Unicode precisa, riportiamo di seguito anche i termini in inglese:
Termine | Significato | Termine inglese |
---|---|---|
Set di caratteri | Il numero di possibili caratteri, ad esempio le cifre “0–9“, le lettere “a–z“, ecc. | Character set |
Punto di codice o posizione di codice | Il numero assegnato a un determinato carattere all’interno dello spazio di codice | Code point |
Codice di carattere | Assegnazione di un qualsiasi carattere a un punto di codice | Coded character set |
Codifica di carattere | Il processo per la trasformazione di un carattere in una struttura tecnica, ad esempio una rappresentazione binaria | Character encoding |
Le codifiche di carattere più comuni
Dalla comparsa di Unicode si sono verificate una grande quantità di codifiche specifiche. La regola prevedeva l’uso di una codifica per ogni lingua o famiglia linguistica. Questo ha portato spesso a errori di rappresentazione e incongruenze nei dati. Per evitare che ciò continuasse ad accadere, le codifiche dei caratteri sono spesso state modellate come sovrainsiemi degli standard già esistenti, compatibili con le versioni precedenti. Per questo motivo lo standard Unicode moderno si basa sulla precedente codifica dei caratteri ISO Latin-1, basata a sua volta sul codice ASCII.
Codifica dei caratteri | Bit per carattere | Caratteri possibili | Set di caratteri |
---|---|---|---|
ASCII | 7 Bit | 128 | Lettere, numeri e caratteri speciali della tastiera statunitense, così come i caratteri di controllo per telescrivente |
ISO Latin-1 (ISO 8859-1) | 8 Bit | 256 | I primi 128 caratteri come ASCII, i successivi 128 caratteri per i caratteri speciali delle lingue europee |
Universal Coded Character Set 2 (UCS-2) | 16 Bit | 65.536 | Caratteri del “Basic Multilingual Plane”(BMP); i primi 256 caratteri corrispondono a quelli di ISO Latin-1 |
Universal Coded Character Set 4 (UCS-4) | 32 Bit | 1.114.111 | I caratteri del BMP più degli altri; in totale 143.859 caratteri nella versione 13.0 di Unicode; i primi 256 caratteri corrispondono a quelli di ISO Latin-1 |
UCS Transformation Format 8 Bit (UTF-8) | 8/16/24/32 Bit | 1.114.111 | Qualunque carattere derivante da UCS-2 e UCS-4; i primi 256 caratteri corrispondono a quelli di ISO Latin-1 |
- Certificato SSL Wildcard incluso
- Registrazione di dominio sicura
- Indirizzo e-mail professionale da 2 GB
Struttura dello standard Unicode
Lo standard Unicode definisce i caratteri e i punti di codice corrispondenti per lettere, sillabe, ideogrammi, interpunzione, caratteri speciali e cifre. Oltre all’alfabeto latino supporta anche quello greco, cirillico, arabo, ebraico, tailandese. A questi si aggiungono anche le grafie giapponesi (katakana, hiragana), cinesi e coreane. Infine, comprende anche i caratteri speciali matematici, commerciali e tecnici, come gli storici caratteri di controllo per telescriventi.
I caratteri sono riassunti in una serie di tabelle. Di seguito vi forniamo una panoramica delle tabelle di caratteri più usate.
I sistemi di scrittura dello standard Unicode
Tabella dei caratteri | Alcuni degli alfabeti contenuti |
---|---|
Sistema di scrittura europeo | Armeno, georgiano, greco, latino |
Sistema di scrittura africano | Etiope, geroglifici egizi, copto |
Sistema di scrittura mediorientale | Arabo, ebraico, siriano |
Sistema di scrittura centroasiatico | Mongolo, tibetano, turco antico |
Sistema di scrittura dell’Asia meridionale | Brahmi, tamil, vedica |
Sistema di scrittura sud-est asiatico | Khmer, rohingya, tailandese |
Sistema di scrittura oceanico e indonesiano | Balinese, buginesiano, giavanese |
Sistema di scrittura dell’Asia orientale | CJK (cinese, giapponese, coreano), hangul (coreano), hiragana (giapponese) |
Sistema di scrittura americano | Cherokee, scrittura sillabica canadese, osage |
Simboli e set di caratteri dello standard Unicode
Tabella dei caratteri | Alcuni dei caratteri contenuti |
---|---|
Set di caratteri | Caratteri della lingua inglese, caratteri delle lingue europee, caratteri CJK |
Simboli alfanumerici | Lettere matematiche, lettere cerchiate |
Simboli tecnici | Simboli per il linguaggio di programmazione APL, simboli per il riconoscimento ottico dei caratteri |
Numeri e cifre | Cifre maya, numeri siyaq ottomani, cifre della scrittura cuneiforme sumera |
Simboli matematici | Frecce, operatori matematici, forme geometriche |
Emoji e pittogrammi | Emoticon, dingbat, altri pittogrammi |
Altri simboli | Simboli alchemici, simboli delle valute, simboli degli scacchi, simboli del domino e simboli del mahjong |
Sistemi di notazione | Scrittura braille, note musicali, stenografia Duployan |
Per cosa si usa lo standard Unicode?
Lo standard Unicode serve principalmente da base fondamentale per l’elaborazione, l’archiviazione e lo scambio di testi in qualsiasi lingua. La maggior parte delle componenti software moderne quali librerie, protocolli, database, ecc., che operano sui testi, sono basate su Unicode. I seguenti esempi servono a chiarire la vastità delle possibilità del suo utilizzo.
Sistemi operativi
Nella maggioranza dei sistemi operativi moderni, Unicode è lo standard interno per la riproduzione testuale. Alcuni sistemi operativi come macOS di Apple permettono l’uso di caratteri Unicode nei nomi dei file.
Siti web
La variante di Unicode UTF-8 si è imposta come standard per la codifica dei documenti in HTML. Già nel 2016 più dell’80 % dei siti web più visitati a livello mondiale utilizzavano UTF-8 per l’archiviazione e la riproduzione dei loro documenti HTML. Per l’uso di lettere non ASCII nei nomi di dominio si è invece affermato lo standard Punycode.
- Editor facile e intuitivo con supporto IA
- Immagini e testi d'effetto in pochi secondi
- Dominio, indirizzo e-mail e certificato SSL inclusi
Linguaggi di programmazione
Molti dei linguaggi di programmazione moderni si servono di Unicode come base per l’elaborazione di testi. Un ulteriore sviluppo è la possibilità di usare i caratteri Unicode per la denominazione di variabili e funzioni. Tra i vari linguaggi è possibile in ECMAScript/JavaScript, come dimostrato dal seguente codice:
let ︎ = true;
let = false;
if (bool_var === ︎) {
// …
}
Database
Il molto apprezzato e ampiamente utilizzato database MySQL supporta l’intero set di dati Unicode con la codifica di caratteri “utf8mb4”. L’uso della codifica di caratteri “utf8” comporta invece la perdita di caratteri il cui punto di codice eccede i 3 byte.
Font
I font contengono glifi che servono per la riproduzione grafica del testo. A causa della grande quantità di caratteri dello standard Unicode, nessun font li contiene tutti. Servono diversi font a comprendere tutti quelli del Basic Multilingual Plane. Un paio di esempi:
Font Unicode | Glifi | Licenza |
---|---|---|
Noto | ca. 65.000 | Open Font License |
Sun-ExtA/B | ca. 50.000 | Freeware |
Unifont | ca. 63.000 | GNU GPL |
Code2000 | ca. 63.000 | Shareware |
Come si imposta Unicode?
In molti casi gli utenti ricorrono a Unicode senza neanche saperlo. Il testo digitale è presente nella maggior parte dei documenti e dei programmi sotto forma di Unicode e può essere copiato, incollato e modificato dall’utente a suo piacimento. A volte risulta necessario per l’utente finale aggiungere un determinato carattere Unicode all’interno di un testo. Per farlo, ci sono diverse possibilità che vi presentiamo qui di seguito.
Tastiere speciali
L’impiego di speciali tastiere software è in assoluto il metodo più diffuso per aggiungere caratteri Unicode in un testo. Su tutti i dispositivi mobili queste tastiere rendono possibile passare da una lingua a un’altra e quindi da un alfabeto a un altro. Cambiando l’alfabeto cambiano anche i tasti, ma i caratteri che compaiono appartengono tutti al repertorio Unicode. I caratteri dei vari alfabeti possono essere liberamente mischiati e combinati tra loro.
Un buon esempio sono le emoji: all’interno di Unicode le emoji sono dei normali caratteri, alla stregua di lettere, numeri e caratteri speciali. Come spesso accade per i caratteri digitali, la riproduzione delle emoji è indipendente, ogni sistema operativo riproduce la stessa emoji in maniera leggermente diversa.
Le utili tastiere software non trovano impiego solo ed esclusivamente sui dispositivi mobili, ma sono presenti anche su desktop. Sono disponibili con Windows, macOS e molte distribuzioni Linux e, in base alla lingua scelta, offrono una quantità variabile di caratteri. Poiché il numero dei tasti è limitato, non riportano tutti i caratteri Unicode. Al contrario, si tratta di una scelta dei caratteri più comunemente usati specifica per la relativa lingua.
Tabelle dei caratteri Unicode
Dopo le tastiere software, le tabelle di caratteri Unicode rappresentano il modo più conveniente per servirsi dei caratteri Unicode. Ricordiamo che un codice di carattere (“coded character set”) corrisponde alla quantità di tutti i caratteri, inclusi i rispettivi punti di codice univoci. L’organizzazione in tabelle si presta bene per questo tipo di struttura e infatti lo standard Unicode comprende le cosiddette Code Charts.
Da un lato queste tabelle permettono di copiare caratteri specifici da riutilizzare altrove. Dall’altro danno la possibilità all’utente finale di leggere il punto di codice di un carattere, ad esempio per usarlo come riferimento numerico del carattere (maggiori informazioni a riguardo nel prossimo paragrafo).
Anche molti sistemi operativi per desktop contengono una tabella di caratteri Unicode. Questo offre una panoramica di tutti i caratteri Unicode disponibili, inclusi punto di codice, descrizione e glifi. Un carattere può essere aggiunto con un clic o copiandolo. Una tabella di caratteri può essere creata con poche righe di codice. Più avanti in questo articolo vi mostriamo un esempio servendoci del linguaggio di programmazione Python.
Riferimento numerico dei caratteri
Al centro dello standard Unicode vi è l’assegnazione di caratteri ai punti di codice. Se si conosce il punto di codice di un carattere, lo si può usare per inserire il carattere corrispondente in vari contesti. In Windows, l’inserimento di simboli Unicode avviene digitando una speciale combinazione di tasti attraverso la normale tastiera fisica. Ricordate però che il numero del punto di codice deve solitamente essere inserito in caratteri esadecimali.
Nella maggior parte dei casi i programmatori hanno bisogno dei riferimenti numerici dei caratteri. La rappresentazione esadecimale dei punti di codice permette la riproduzione di un carattere Unicode con caratteri appartenenti al set ASCII. Di seguito vi mostriamo il procedimento in HTML, ma dal punto di vista teorico vale anche per Python, C++ e altri.
Lo schema generale per inserire un carattere attraverso il suo riferimento numerico consiste nel riferimento stesso preceduto da un termine di apertura e seguito da un termine di chiusura: nei documenti HTML il riferimento numerico si apre con “&#x” e si chiude con “;”. Nel mezzo va riportato il punto di codice esadecimale di minimo due e massimo quattro cifre, senza lasciare spazi vuoti. Il modello da usare è quindi “&#xNNNN;”.
Per includere il simbolo del copyright “©” in un documento HTML seguite questo procedimento:
- Cercate il carattere in una tabella Unicode.
- Segnatevi il punto di codice relativo al carattere.
In questo esempio, il punto di codice rappresentato in caratteri esadecimali è “U+00A9”.
- Riportate il riferimento del carattere nel codice sorgente HTML o aggiungete un documento in markdown.
Nel nostro caso inseriamo “©“ che restituisce il simbolo “©”.
In alternativa potete usare i punti di codice inserendoli con caratteri decimali invece che esadecimali. Tuttavia, questo approccio è meno comune. In questo caso il riferimento numerico inizia con “&#” (ovvero senza la “x”) e si conclude sempre con “;”. All’interno di questo intervallo si riporta il punto di codice in rappresentazione decimale. Sempre con riferimento all’esempio di cui sopra, il riferimento numerico per il simbolo del copyright andrebbe inserito così “©”.
Usate lo Unicode Character Inspector per scoprire velocemente i codici corrispondenti a un carattere.
Le entità
Poiché il modo di scrivere i caratteri Unicode come riferimenti numerici è tutt’altro che intuitivo, ci sono altri metodi a disposizione: le entità. Queste vengono definite per i caratteri più comunemente usati e assegnano al carattere un nome breve e facile da ricordare. Un’entità inizia con il carattere “&” e termina con il punto e virgola “;”. Nel mezzo si posiziona il nome stabilito senza spazi. Per aggiungere il simbolo del copyright “©” in un documento HTML è sufficiente scrivere “©”.
Potete trovare Lla lista completa dei riferimenti dei caratteri nello standard HTML.
Linguaggi di programmazione
La maggior parte dei linguaggi di programmazione contiene funzioni di base per trasformare i caratteri e i punti di codice. Queste funzioni prendono spesso il nome di “ord()” e “chr()”.
‘chr(ord(carattere)) == carattere’
Sappiate che è sempre possibile risalire al punto di codice corrispondente a un carattere. In senso contrario la corrispondenza funziona solo per i numeri effettivamente definiti come punto di codice del carattere codificato. Di seguito vi mostriamo lo schema di base ricorrendo a un esempio con Python:
# Determinare il punto di codice decimale di un carattere
ord('A') # `65`
# Determinare il punto di codice esadecimale di un carattere
hex(ord('A')) # `0x41`
# Determinare il carattere corrispondente al punto di codice
chr(65) # `'A'`
chr(0x41) # `'A'`
chr(0x110001) # errore, poiché il punto di codice > `0x110000`
Grazie a queste funzioni si può facilmente creare una tabella per i punti di codice del set di caratteri Unicode. Per farlo basta ripetere i punti di codice e indicare i caratteri corrispondenti. Con Python lo si può fare con poche righe di codice:
# iniziare `range` con `32`, poiché con valori più piccoli si ottengono i caratteri di controllo
# Fornire set di caratteri ASCII
for code_point in range(32, 128):
# Fornire ISO Latin-1
for code_point in range(32, 256):
# Fornire punto di codice in rappresentazione decimale ed esadecimale assieme al carattere corrispondente
print(code_point, hex(code_point), chr(code_point))
Libreria dei linguaggi di programmazione ICU
I componenti internazionali per Unicode (International Components for Unicode”, ICU) sono raccolti in una libreria di linguaggi di programmazione messa a disposizione da Unicode Consortium. La libreria rilasciata con licenza open source può essere usata in molti sistemi operativi. Il software serve all’internazionalizzazione della programmazione (“Internationalization” spesso abbreviato come “i18n”). Tra i settori di utilizzo vi sono:
- Elaborazione di testi Unicode
- Supporto di espressioni regolari in Unicode
- Analisi sintattica (parsing) o formattazione di date, orari, numeri, valute e messaggi
La libreria ICU è disponibile in due versioni:
- La “icu4c” è scritta in C/C++ e mette a disposizione una API per questi linguaggi di programmazione.
- La “icu4j” è scritta in Java e mette a disposizione una API per questo linguaggio di programmazione.
L’utilizzo delle componenti porta a risultati consistenti indipendentemente dalla piattaforma in uso.
Attributo charset nell’head dei documenti HTML
Ad oggi, la maggior parte dei documenti HTML è disponibile nella codifica di caratteri UTF-8. Per assicurarsi che un visitatore riesca a visualizzare il documento con i caratteri corretti, dovrebbe essere inserito un attributo meta Charset nell’head del documento HTML. Questo serve a informare il browser che deve interpretare il documento richiesto come UTF-8:
<head>
<meta charset="utf-8">
<!—altri elementi dell’head -->
</head>
Font di Twitter
La piattaforma di messaggi brevi Twitter non permette alcuna formattazione testuale per tweet, profili o nomi utente. Le possibilità creative dell’utente risultano perciò limitate. Degli sviluppatori ingegnosi sono però riusciti a ideare un trucchetto: Twitter si basa su Unicode e questo permette di comporre un testo, appositamente formattato, con caratteri speciali. I più usati sono i caratteri che ricordano le lettere latine. Il modo più facile per riuscirci è quello di usare un generatore di font per Twitter.