← TIC — Tecnologie dell'informazione e della comunicazione  ·  Rappresentare le informazioni

Come si codifica il testo: ASCII e Unicode

Nell'argomento precedente abbiamo imparato a convertire i numeri tra decimale e binario. Ma un computer non memorizza solo numeri: memorizza anche testo — lettere, cifre, segni di punteggiatura. Come fa, se conosce solo sequenze di 0 e 1? La soluzione è semplice: si assegna a ogni carattere un numero di codice, e quel numero viene poi convertito in binario esattamente con i metodi che già conosciamo.

Il primo standard diffuso per fare questa associazione si chiama ASCII (American Standard Code for Information Interchange), sviluppato negli Stati Uniti nei primi anni '60 e rivisto nel 1967 per uniformare il modo in cui telescriventi e poi computer si scambiavano testo.

Un Teletype Model 33, la telescrivente per cui negli anni '60 fu standardizzato il codice ASCII
Un Teletype Model 33, la telescrivente per cui negli anni '60 fu standardizzato il codice ASCIIKai Wegner — Wikimedia Commons, CC BY 2.0

L'ASCII usa 7 bit per ogni carattere: come abbiamo visto nell'argomento sul sistema binario, con 7 bit si ottengono 2 elevato 7 = 128 combinazioni diverse, quindi 128 caratteri rappresentabili (codici da 0 a 127).

Facciamo un esempio concreto. Alla lettera maiuscola 'A' l'ASCII assegna il codice decimale 65. Per memorizzarla, il computer converte 65 in binario con il metodo delle divisioni successive già visto:

1. 65 ÷ 2 = 32 con resto 1 2. 32 ÷ 2 = 16 con resto 0 3. 16 ÷ 2 = 8 con resto 0 4. 8 ÷ 2 = 4 con resto 0 5. 4 ÷ 2 = 2 con resto 0 6. 2 ÷ 2 = 1 con resto 0 7. 1 ÷ 2 = 0 con resto 1 Leggendo i resti dal basso verso l'alto: la lettera 'A' viene memorizzata come 1000001.

La tabella ufficiale del codice US-ASCII a 7 bit (1967): ogni carattere è abbinato a un codice binario, ottale, decimale ed esadecimale
La tabella ufficiale del codice US-ASCII a 7 bit (1967): ogni carattere è abbinato a un codice binario, ottale, decimale ed esadecimaleGoverno degli Stati Uniti, dominio pubblico — Wikimedia Commons
Focus

Le zone principali della tabella ASCII

Alcuni codici decimali utili da ricordare: 32 = spazio, 48-57 = cifre '0'-'9', 65-90 = lettere maiuscole 'A'-'Z', 97-122 = lettere minuscole 'a'-'z'. Nota che ogni minuscola vale esattamente 32 in più della sua maiuscola: è per questo che, cambiando un solo bit, un computer può trasformare una maiuscola in minuscola.

Focus

Anche lo spazio ha un codice

Anche un carattere "invisibile" come lo spazio ha il suo codice: 32 in ASCII. Ogni carattere che digiti, anche quelli che non vedi come lo spazio o l'invio a capo, viene sempre convertito in un numero e poi in binario.

L'ASCII, però, ha un limite evidente: con appena 128 (o al massimo 256 nelle versioni "estese") codici disponibili, basta appena per l'alfabeto inglese, le cifre e la punteggiatura di base. Non c'è spazio per le nostre lettere accentate (à, è, ù), né per alfabeti come il cirillico, il greco, l'arabo o gli ideogrammi cinesi e giapponesi.

Per risolvere questo problema è nato Unicode: uno standard che assegna un codice numerico univoco a ogni carattere di ogni sistema di scrittura del mondo — oggi oltre 149.000 caratteri, incluse le emoji. L'encoding Unicode più usato sul web, chiamato UTF-8, è stato progettato apposta per restare compatibile con l'ASCII: i suoi primi 128 codici coincidono esattamente con quelli ASCII, quindi ogni testo scritto in ASCII è automaticamente anche un testo UTF-8 valido.

La parola "ciao" scritta in 23 lingue e alfabeti diversi: tutti rappresentabili con Unicode
La parola "ciao" scritta in 23 lingue e alfabeti diversi: tutti rappresentabili con UnicodePablo Carlos Budassi — Wikimedia Commons, CC BY-SA 4.0
Il confronto visivo tra i 128 codici dell'ASCII e gli oltre 149.000 di Unicode
Il confronto visivo tra i 128 codici dell'ASCII e gli oltre 149.000 di UnicodeSchema originale
💡 Lo sapevi?

Il bug del titolo impossibile da leggere

Nel 2005 un famoso bug di Windows faceva apparire nella barra del titolo di Bloc Note la frase senza senso "Bush hid the facts" ripetuta all'infinito con caratteri strani, semplicemente perché Windows sbagliava a indovinare se il testo fosse codificato in ASCII/ANSI oppure in un altro formato: un errore di codifica del testo diventato virale in tutto il mondo.

💡 Lo sapevi?

Quando il testo diventa illeggibile: il "mojibake"

Hai mai visto un testo pieno di simboli strani come "perché" al posto di "perché"? Si chiama mojibake (parola giapponese per "caratteri trasformati") ed è quasi sempre lo stesso problema: un programma legge un testo scritto con una codifica (per esempio UTF-8) credendo che sia scritto con un'altra.

Focus

UTF-8 non usa sempre lo stesso numero di byte

A differenza dell'ASCII, dove ogni carattere occupa sempre un byte, in UTF-8 un carattere può occupare da 1 a 4 byte: i caratteri latini di base ne usano 1 (per restare compatibili con l'ASCII), mentre accenti, alfabeti non latini ed emoji possono usarne 2, 3 o 4.

💡 Lo sapevi?

Anche le emoji sono... numeri!

😀 non è un disegnino "speciale": è un carattere Unicode a tutti gli effetti, con un proprio codice numerico (il suo punto di codice è U+1F600). Le emoji sono state aggiunte a Unicode a partire dal 2010 proprio perché lo standard è pensato per rappresentare qualsiasi simbolo scritto usato dagli esseri umani, non solo lettere e cifre.

💡 Lo sapevi?

Il primo SMS della storia

Il 3 dicembre 1992 un ingegnere britannico inviò il primissimo SMS della storia, con il semplice testo "Merry Christmas": anche quel messaggio, come ogni SMS ancora oggi, viaggiò convertito in codici numerici e poi in sequenze di 0 e 1, esattamente come abbiamo visto in questo argomento.

VideoCodifica numerica, bit, byte, tabella ASCII e Unicode (il Prof Elettrico - Corrado Lai)VideoASCII, Unicode, UTF-8: spiegati in modo semplice (LeetCoder)VideoTabella ASCII e Unicode (Antonio Pagano, Informatica Per Scuole Superiori)
🧪 Attività pratica⏱ 15 min

Decifra il messaggio segreto

Usando la tabella dei codici ASCII vista sopra (32=spazio, 48-57=cifre, 65-90=maiuscole, 97-122=minuscole) e una tabella ASCII completa a disposizione, decodifica a mano questa sequenza di codici decimali: 67-73-65-79. Poi, in coppia, scrivi tu una parola breve di 3-4 lettere maiuscole, traducila nei suoi codici ASCII decimali e falla decifrare al compagno.

Ora che sappiamo rappresentare sia numeri sia testo con sequenze di 0 e 1, nel prossimo argomento vedremo come si misura la quantità di informazione: da un singolo bit fino ai giga e terabyte dei dischi che usiamo ogni giorno.

CARATTERE es. 'A' CODICE NUMERICO es. 65 BINARIO es. 1000001 ASCII 128 codici alfabeto latino di base UNICODE oltre 149.000 codici tutte le lingue e le emoji

Mettiti alla prova

1. Qual è il codice ASCII decimale della lettera maiuscola 'A'? E quello della lettera minuscola 'a'?

'A' = 65, 'a' = 97: nell'ASCII le lettere minuscole hanno sempre un codice di 32 unità superiore alla corrispondente maiuscola.

2. Quanti caratteri diversi si possono rappresentare con i 7 bit dell'ASCII originale?

2 elevato 7 = 128 caratteri diversi, con codici da 0 a 127.

3. Perché l'ASCII da solo non basta per scrivere in tutte le lingue del mondo?

Perché con al massimo 256 codici disponibili (nelle versioni estese) non c'è spazio per alfabeti come il cirillico, il greco, l'arabo o il cinese, né per lettere accentate come à, è, ù.

4. Cos'è Unicode e che problema risolve rispetto all'ASCII?

Unicode è uno standard che assegna un codice numerico univoco a ogni carattere di ogni sistema di scrittura del mondo, incluse le emoji: risolve il limite dell'ASCII, che copriva solo l'alfabeto latino di base.

5. Vero o falso: un testo scritto solo con i 128 caratteri ASCII originali è anche un testo UTF-8 valido.

Vero: UTF-8, l'encoding Unicode più diffuso, è stato progettato per restare compatibile con l'ASCII, i cui 128 codici coincidono esattamente con i suoi primi 128.

6. Qual è il codice ASCII decimale dello spazio, e perché anche un carattere "invisibile" ne ha uno?

32; ogni carattere digitato, visibile o no, viene sempre convertito in un numero e poi in binario.

7. Quanti byte può occupare un carattere in UTF-8?

Da 1 a 4 byte, a seconda del carattere: i caratteri latini di base ne usano 1, altri alfabeti o le emoji possono usarne fino a 4.

8. Che cos'è il "mojibake"?

Un testo che appare illeggibile o pieno di simboli strani perché è stato letto con una codifica diversa da quella con cui è stato scritto.

9. Che cosa causò il celebre bug "Bush hid the facts" del 2005?

Un errore di Windows nell'indovinare la codifica del testo (ASCII/ANSI o un'altra), che faceva apparire quella frase ripetuta all'infinito con caratteri strani.

10. Quando fu inviato il primo SMS della storia, e che testo conteneva?

Il 3 dicembre 1992, con il testo "Merry Christmas".

Per chiarimenti su questo argomento è possibile scrivere via email