Qual è la differenza tra testo ASCII e Unicode?

ASCII e Unicode sono entrambi standard che fanno riferimento alla rappresentazione digitale del testo, in particolare i caratteri che compongono il testo. Tuttavia, i due standard sono significativamente diversi, con molte proprietà che riflettono il rispettivo ordine di creazione.

America contro l’universo

L’American Standard Code for Information Interchange (ASCII), non sorprende, si rivolge a un pubblico americano, scrivendo in alfabeto inglese. Si occupa di lettere non accentate, come AZ e az, più un piccolo numero di simboli di punteggiatura e caratteri di controllo.

In particolare, non c’è modo di rappresentare parole in prestito adottate da altre lingue, come café in ASCII, senza anglicizzarle sostituendole con caratteri accentati (es. Caffè ). Le estensioni ASCII localizzate sono state sviluppate per soddisfare le esigenze di varie lingue, ma questi sforzi hanno reso difficile l’interoperabilità e stavano chiaramente estendendo le capacità di ASCII.

Al contrario, l’Universal Coded Character Set (Unicode) si trova all’estremità opposta della scala delle ambizioni. Unicode cerca di soddisfare il maggior numero possibile di sistemi di scrittura del mondo, nella misura in cui copre le lingue antiche e il set di simboli espressivi preferito da tutti, gli emoji.

Set di caratteri o codifica dei caratteri?

In termini semplici, un set di caratteri è una selezione di caratteri (ad esempio, AZ) mentre una codifica di caratteri è una mappatura tra un set di caratteri e un valore che può essere rappresentato digitalmente (ad esempio, A = 1, B = 2).

Lo standard ASCII è effettivamente entrambi: definisce l’insieme di caratteri che rappresenta e un metodo per mappare ogni carattere a un valore numerico.

Al contrario, la parola Unicode viene utilizzata in diversi contesti per indicare cose diverse. Puoi pensarlo come un termine onnicomprensivo, come ASCII, per riferirsi a un set di caratteri e un numero di codifiche. Tuttavia, poiché esistono diverse codifiche, il termine Unicode viene spesso utilizzato per fare riferimento al set complessivo di caratteri, piuttosto che al modo in cui vengono mappati.

Taglia

A causa del suo ambito, Unicode rappresenta molti più caratteri di ASCII. ASCII standard utilizza un intervallo di 7 bit per codificare 128 caratteri distinti. Unicode, d’altra parte, è così grande che abbiamo bisogno di usare una terminologia diversa solo per parlarne!

Unicode si rivolge a 1.111.998 punti di codice indirizzabili . Un punto di codice è più o meno analogo a uno spazio riservato a un personaggio, ma la situazione è molto più complicata di quella quando inizi ad approfondire i dettagli!

Un confronto più utile è il numero di script (o sistemi di scrittura) attualmente supportati. Naturalmente, ASCII gestisce solo l’alfabeto inglese, essenzialmente la scrittura latina o romana. La versione di Unicode prodotta nel 2020 va molto oltre: include il supporto per un totale di 154 script.

Conservazione

L’intervallo di 7 bit di ASCII significa che ogni carattere è memorizzato in un singolo byte di 8 bit; il bit di riserva è inutilizzato in ASCII standard. Ciò rende i calcoli delle dimensioni banali: la lunghezza del testo, in caratteri, è la dimensione del file in byte.

Puoi confermarlo con la seguente sequenza di comandi bash. Per prima cosa creiamo un file contenente 12 lettere di testo:

$ echo -n 'Hello, world' > foo

Per verificare che il testo sia nella codifica ASCII, possiamo utilizzare il comando file :

$ file foo
 foo: ASCII text, with no line terminators

Infine, per ottenere il numero esatto di byte che il file occupa, utilizziamo il comando stat :

$ stat -f%z foo
 12

Poiché lo standard Unicode si occupa di una gamma di caratteri molto più ampia, un file Unicode occupa naturalmente più spazio di archiviazione. Quanto dipende esattamente dalla codifica.

Ripetendo lo stesso insieme di comandi di prima, utilizzando un carattere che non può essere rappresentato in ASCII, si ottiene quanto segue:

$ echo -n '€' > foo
 $ file foo
 foo: UTF-8 Unicode text, with no line terminators
 $ stat -f%z foo
 3

Quel singolo carattere occupa 3 byte in un file Unicode. Nota che bash ha creato automaticamente un file UTF-8 poiché un file ASCII non può memorizzare il carattere scelto (€). UTF-8 è di gran lunga la codifica dei caratteri più comune per Unicode; UTF-16 e UTF-32 sono due codifiche alternative, ma vengono utilizzate molto meno.

UTF-8 è una codifica a larghezza variabile, il che significa che utilizza diverse quantità di memoria per diversi punti di codice. Ogni punto di codice occuperà da uno a quattro byte, con l’intento che caratteri più comuni richiedano meno spazio, fornendo un tipo di compressione incorporata. Lo svantaggio è che la determinazione dei requisiti di lunghezza o dimensione di una determinata porzione di testo diventa molto più complicata.

ASCII è Unicode, ma Unicode non è ASCII

Per compatibilità con le versioni precedenti, i primi 128 punti di codice Unicode rappresentano i caratteri ASCII equivalenti. Poiché UTF-8 codifica ciascuno di questi caratteri con un singolo byte, anche qualsiasi testo ASCII è un testo UTF-8. Unicode è un superset di ASCII.

Tuttavia, come mostrato sopra, molti file Unicode non possono essere utilizzati in un contesto ASCII. Qualsiasi personaggio fuori dai limiti verrà visualizzato in modo inaspettato, spesso con caratteri sostituiti completamente diversi da quelli previsti.

Uso moderno

Per la maggior parte degli scopi, ASCII è ampiamente considerato uno standard legacy. Anche in situazioni che supportano solo lo script latino – dove il pieno supporto per le complessità di Unicode, per esempio, non è necessario, di solito è più conveniente usare UTF-8 e sfruttare la sua compatibilità ASCII.

In particolare, le pagine web dovrebbero essere salvate e trasmesse utilizzando UTF-8, che è l’impostazione predefinita per HTML5. Questo è in contrasto con il Web precedente, che si occupava di ASCII per impostazione predefinita prima che fosse sostituito dal latino 1.

Uno standard che sta cambiando

L’ultima revisione di ASCII è avvenuta nel 1986.

Al contrario, Unicode continua ad essere aggiornato ogni anno. Vengono regolarmente aggiunti nuovi script, personaggi e, in particolare, nuove emoji. Con solo una piccola parte di questi assegnati, è probabile che l’intero set di caratteri cresca e cresca per il prossimo futuro.

Correlati: spiegati i 100 emoji più popolari

ASCII contro Unicode

ASCII ha servito il suo scopo per molti decenni, ma Unicode lo ha ora sostituito efficacemente per tutti gli scopi pratici diversi dai sistemi legacy. Unicode è più grande e, quindi, più espressivo. Rappresenta uno sforzo collaborativo a livello mondiale e offre una flessibilità molto maggiore, anche se a scapito di una certa complessità.