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.

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.

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.
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.

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.
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.
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.
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.
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)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.
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".