
La codifica dei caratteri e perché UTF-8 ha prevalso
- VersionDude
- Standard
- 5 min di lettura
Il mojibake, gli accenti rotti e i simboli «» si riconducono tutti alla codifica. Ecco cos'è UTF-8 e perché è lo standard predefinito del web moderno.
I computer non memorizzano lettere; memorizzano numeri. Una codifica dei caratteri è semplicemente l'accordo su quale numero significhi quale carattere, affinché il byte registrato da un programma sia riletto come la stessa lettera da un altro. Quando questo accordo tiene, il testo funziona semplicemente; quando si rompe, il risultato è quel disordine incomprensibile familiare che affligge l'informatica fin dai suoi primi giorni.
Quando un documento è scritto con una codifica e letto con un'altra, ottieni il mojibake — gli accenti confusi, i quadratini misteriosi e i punti interrogativi che tutti hanno visto in un momento o nell'altro. Un «café» diventa «café», una virgoletta curva si trasforma in una sequenza di simboli, e un'intera pagina in un'altra lingua può dissolversi in caratteri incomprensibili. La causa sottostante è sempre la stessa: lo scrittore e il lettore erano in disaccordo su quale numero rappresentasse quale carattere.
Dall'ASCII a un mosaico di codifiche

Le radici del problema risiedono nelle codifiche limitate dei primi tempi dell'informatica. ASCII, uno degli schemi fondatori, copriva solo l'inglese — le lettere latine di base, le cifre e una manciata di simboli — perché usava una piccola gamma di numeri. Era sufficiente per i primi tempi dell'informatica americana ma non lasciava spazio alle lettere accentate, e ancor meno alle scritture della maggior parte delle lingue del mondo.
Ciò che è seguito è stato un mosaico di codifiche a 8 bit incompatibili, ciascuna delle quali comprimeva un insieme diverso di caratteri aggiuntivi nello stesso spazio limitato. Una codifica copriva gli accenti dell'Europa occidentale, un'altra il cirillico, un'altra il greco, e così via, con lo stesso numero che significava caratteri diversi in ciascuna. Un documento aveva senso solo se si sapeva esattamente quale di queste codifiche usasse, e sbagliare produceva il mojibake — una situazione fragile e soggetta a errori.
Come Unicode ha risolto il problema di fondo
Unicode ha risolto il problema sottostante alla sua radice. Anziché ritagliare un piccolo spazio di numeri, attribuisce a ogni carattere di ogni scrittura — latino, cirillico, arabo, cinese, emoji e molto altro — il proprio punto di codice unico. Unicode è il catalogo universale: un'identità unica e concordata per ogni carattere che l'umanità scrive, eliminando l'ambiguità che ha condannato il vecchio mosaico di codifiche.
Vale la pena separare due idee facili da confondere, perché la distinzione è la chiave per comprendere l'argomento. Unicode definisce i punti di codice — i numeri astratti attribuiti ai caratteri — ma non dice di per sé come questi numeri siano trasformati in byte sul disco o sulla rete. Questo secondo compito, far corrispondere i punti di codice a byte reali, è il ruolo di una codifica, e UTF-8 è la codifica che lo fa.
Perché UTF-8 ha conquistato il web
UTF-8 ha prevalso sulle alternative per diverse ragioni concrete. È retrocompatibile con ASCII, quindi qualsiasi testo in inglese semplice è già UTF-8 valido senza alcuna modifica. È economo in spazio per il testo comune, usando un solo byte per i caratteri più frequenti e di più solo quando è necessario. E può rappresentare ogni carattere Unicode, così che una sola codifica basti finalmente per tutte le lingue insieme.
Queste proprietà combinate hanno fatto di UTF-8 l'impostazione predefinita schiacciante del web moderno, e lo standard HTML raccomanda di dichiararlo esplicitamente. La convenzione è collocare una dichiarazione <meta charset="utf-8"> vicino all'inizio di ogni documento, il che indica al browser senza ambiguità come interpretare i byte che seguono. Dichiararlo elimina ogni congettura e impedisce al browser di ripiegare su un'ipotesi errata.
Dove i bug si insinuano ancora
Saltare questa dichiarazione, o lasciare che gli strati si contraddicano, è esattamente là dove i problemi si insinuano ancora oggi. Se un file è registrato in una codifica ma servito con un'intestazione che ne rivendica un'altra, o renderizzato senza alcuna dichiarazione, un browser può indovinare in modo errato e reintrodurre proprio il mojibake che Unicode doveva eliminare. Gli errori sono quasi sempre una discordanza tra gli strati, e non un difetto di UTF-8 stesso.
Il consiglio pratico è dunque di una semplicità rassicurante: registra i tuoi file in UTF-8, servili in UTF-8, e dichiara UTF-8. Fai in modo che questi tre elementi concordino e un'intera categoria di bug di codifica frustranti e difficili da tracciare scompare semplicemente. UTF-8 ha prevalso proprio perché rende il buon comportamento l'impostazione predefinita facile, e allineare tutta la tua catena dietro di esso è uno dei guadagni di affidabilità meno costosi dello sviluppo web.



Queste proprietà combinate hanno fatto di UTF-8 l'impostazione predefinita schiacciante del web moderno, e lo standard HTML raccomanda di dichiararlo esplicitamente. La convenzione è collocare una dichiarazione <meta charset="utf-8"> vicino all'inizio di ogni documento, il che indica al browser senza ambiguità come interpretare i byte che seguono. Dichiararlo elimina ogni congettura e impedisce al browser di ripiegare su un'ipotesi errata.