Che cos'è una codifica dei caratteri
Una codifica è un accordo: «il numero 65 significa la lettera A». Quando scrivi un testo, il programma salva quei numeri; quando un'altra persona lo apre, il suo programma li ritraduce in lettere usando lo stesso accordo. Se i due non usano la stessa tabella, il testo esce sbagliato.
Bisogna distinguere due idee. Una è il set di caratteri, l'elenco di quali numeri corrispondono a quali simboli. L'altra è come quei numeri vengono salvati in byte. In ASCII le due coincidono in modo banale; in Unicode no, ed è qui che entra in gioco UTF-8.
ASCII: 128 caratteri a 7 bit
ASCII (sigla di American Standard Code for Information Interchange) fu standardizzato negli anni Sessanta. Usa 7 bit, cioè 2 elevato a 7 = 128 codici, da 0 a 127. Di questi, 33 sono caratteri di controllo (da 0 a 31 e il 127) e 95 sono stampabili (da 32 a 126, compreso lo spazio).
Non include lettere accentate, né la ñ, né il simbolo dell'euro: è stato progettato per l'inglese. Questo spiega perché in seguito sono servite altre tabelle.
| Carattere di controllo | Decimale | Esadecimale | Binario (7 bit) | A cosa serve |
|---|---|---|---|---|
| Nullo (NUL) | 0 | 00 | 0000000 | Segna la fine di una stringa in vari linguaggi |
| Tabulazione orizzontale (TAB) | 9 | 09 | 0001001 | Salta al prossimo tabulatore |
| Nuova riga (LF) | 10 | 0A | 0001010 | Scende alla riga successiva |
| Ritorno a capo (CR) | 13 | 0D | 0001101 | Torna all'inizio della riga |
| Escape (ESC) | 27 | 1B | 0011011 | Avvia sequenze di controllo |
| Spazio | 32 | 20 | 0100000 | Primo carattere stampabile |
| Cancella (DEL) | 127 | 7F | 1111111 | Cancella il carattere |
Relazioni da ricordare
La tabella non è ordinata a caso. Con poche regolarità puoi leggere i codici a memoria.
- Le cifre dallo «0» al «9» occupano da 48 a 57 (da 30 a 39 in esadecimale). Il valore di una cifra è il suo codice meno 48: il «7» è 55, e 55 − 48 = 7.
- Le maiuscole vanno da 65 («A») a 90 («Z») e le minuscole da 97 («a») a 122 («z»).
- La differenza tra una maiuscola e la sua minuscola è sempre 32: «A» = 65 e «a» = 97; «C» = 67 e «c» = 99. In binario cambia un solo bit: 01000001 per «A» e 01100001 per «a».
- Per sapere che posto occupa una maiuscola nell'alfabeto, sottrai 64: «C» è 67 e 67 − 64 = 3, la terza lettera.
- Poiché tutte le maiuscole (da 65 a 90) hanno codici minori delle minuscole (da 97 a 122), un ordinamento alfabetico «per codice» mette «Zebra» prima di «apple». Molti programmi hanno bisogno di un'opzione di confronto a parte per ordinare bene.
Fine riga: LF, CR e CRLF
Un'andata a capo sembra una cosa semplice, ma si scrive in modo diverso a seconda del sistema. Unix, Linux e macOS usano un solo carattere, LF (10). Windows ne usa due di seguito, CR e LF (13 e 10), noti come CRLF. Le vecchie telescriventi avevano bisogno di due comandi distinti: riportare il carrello all'inizio e far avanzare la carta di una riga.
Questa differenza è la causa di file che in un editor di base si vedono tutti su una riga, o con un simbolo strano alla fine di ogni riga. Se cerchi quale codice ha ciascuno, scrivi LF o CR nella casella di ricerca della tabella ASCII.
L'«ASCII esteso» non è uno standard
Poiché un byte ha 8 bit e ASCII ne usa solo 7, restavano liberi 128 codici (da 128 a 255) e ogni produttore e regione li riempì a modo suo. Questo si chiama «ASCII esteso», ma non esiste una tabella unica: ce ne sono molte, chiamate tabelle codici (code page). Due delle più note sono Latin-1 (ISO-8859-1), in cui la é è il codice 233, e Windows-1252, simile ma con differenze nei codici da 128 a 159 (lì si trova, per esempio, l'euro).
Il problema è che il codice 233 significa «é» in una tabella e un'altra cosa in un'altra. Un testo scritto con una tabella e letto con un'altra mostrava spazzatura. Unicode è nato per mettere fine a quel disordine.
Unicode e UTF-8
Unicode assegna un numero unico, chiamato punto di codice, a ogni carattere di quasi tutti i sistemi di scrittura del mondo, più simboli ed emoji. Oggi ha più di 150.000 caratteri. Si scrive con il prefisso U+ e in esadecimale: la «A» è U+0041, la «ñ» è U+00F1, l'euro è U+20AC e l'emoji del volto sorridente è U+1F600. I primi 128 punti di codice sono esattamente quelli dell'ASCII.
UTF-8 è il modo più usato per salvare quei numeri in byte, e ne usa da 1 a 4 a seconda del carattere. I 128 dell'ASCII occupano un solo byte identico a quello di sempre, quindi un testo ASCII è anche un testo UTF-8 valido. Il resto occupa più byte.
| Carattere | Punto di codice | Byte in UTF-8 | Byte (esadecimale) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Perché compare «Ã±» al posto di «ñ»
È l'errore più comune e ha una spiegazione precisa. La ñ in UTF-8 sono due byte: C3 e B1. Se un programma crede che il testo sia in Latin-1, legge ogni byte come un carattere: il C3 è «Ã» e il B1 è «±». Risultato: «Ã±». Succede lo stesso con «é», che si vede come «Ã©», e con «perché», che compare come «perché».
La soluzione è quasi sempre indicare al programma di aprire il file come UTF-8 (in un editor di testo o nelle impostazioni di importazione di un foglio di calcolo). Quando accade il contrario, testo in Latin-1 letto come UTF-8, di solito compaiono rombi con un punto interrogativo, perché quei byte isolati non formano sequenze UTF-8 valide.
Come usare la tabella ASCII e il convertitore
Lo strumento «Tabella ASCII» mostra i 128 caratteri con il loro codice in decimale, esadecimale, ottale e binario, e il nome di quelli di controllo.
- Scrivi nella casella di ricerca un carattere, un codice o il nome di uno di controllo (per esempio A, 65, 41 o LF) per trovare la sua riga.
- Usa i pulsanti di filtro (Controllo, Cifre, Maiuscole, Minuscole, Segni) per vedere solo un gruppo.
- Per convertire, scrivi un testo in «Testo» e scegli il formato (decimale, esadecimale, ottale o binario): sotto compaiono i codici. «Ciao» dà 67 105 97 111 in decimale e 43 69 61 6F in esadecimale.
- Puoi farlo anche al contrario: incolla codici separati da spazi o virgole in «Codici» e si ricostruisce il testo. In esadecimale si accettano prefissi come 0x41.
Se il testo ha caratteri che non sono ASCII, come la ñ, lo strumento lo segnala e mostra il loro codice Unicode. Per vedere i byte reali in UTF-8 usa «Testo in binario»: la ñ dà 11000011 10110001, due byte da 8 bit. I limiti: la tabella mostra solo l'ASCII standard, non quello esteso, e tutto viene calcolato nel tuo browser senza inviare il testo a nessun server.
Domande frequenti
Quanti caratteri ha l'ASCII?
128, con codici da 0 a 127 e 7 bit ciascuno. Di questi, 33 sono di controllo e 95 sono stampabili, contando lo spazio.
Qual è il codice ASCII della lettera A e della a?
La «A» è 65 (41 in esadecimale, 01000001 in binario) e la «a» è 97 (61 in esadecimale, 01100001 in binario). Differiscono sempre di 32.
Qual è la differenza tra ASCII e Unicode?
ASCII ha 128 caratteri pensati per l'inglese. Unicode ne ha più di 150.000, di quasi tutte le lingue ed emoji, e i suoi primi 128 sono gli stessi dell'ASCII.
Che cos'è UTF-8?
È il modo più usato per salvare il testo Unicode in byte. Usa da 1 a 4 byte per carattere: quelli dell'ASCII ne occupano uno, una ñ ne occupa due e un emoji quattro.
Perché il mio testo mostra «Ã±» o «Ã©»?
Perché un testo salvato in UTF-8 viene letto come Latin-1. Apri il file indicando la codifica UTF-8 e il problema si risolve.