È ormai un bel po’ di tempo che, per tutto il web (e non solo) programming che faccio, ho deciso di abbandonare ISO-8859-1, ISO-8859-15, US-ASCII e tutti gli altri set di caratteri monobyte in favore di UTF-8, la fantastica implementazione di Unicode che permette di accedere a tutti i caratteri Unicode utilizzando un solo charset. Questa improvvisa mossa mi è costata alcune rappresaglie da parte dei miei collaboratori, che UTF-8 ancora non lo utilizzano.

Inizialmente avevo preso questa apparentemente pazzesca decisione per necessità: uno dei sistemi di templating che utilizzo di più mi dava seri problemi con utf8 (sì, insomma, ISO-8859-1). Il passaggio a UTF-8 non è stato per me indolore, anche a causa della bizzarra (ma in effetti forse migliore possibile) gestione dei charset di Perl 5.8: di colpo mi sono visto costretto a scrivere tutto, dal codice ai template ai contenuti dei database, in UTF-8. Dopo alcuni mesi, ciò che mi sento di dire è: tutti i charset monobyte devono morire. Con UTF-8 potete scrivere con caratteri latini, cirillici, giapponesi anche contemporaneamente, senza preoccuparvi di chi vedrà il vostro file: chiunque, se il suo browser/altro programma supporterà UTF-8 (e tutti i browser lo supportano) ed avrà installato i necessari font, sarà in grado di visualizzare ciò che avete scritto.

In sintesi, UTF-8 secondo me è la salvezza per molti mali relativi alla gestione di qualsiasi tipo di dato testuale in qualsiasi lingua. E, soprattutto, rimane compatibile alla perfezione con il set US-ASCII (inglese americano). La migrazione è infatti in gran parte trasparente: un documento US-ASCII è già di fatto anche UTF-8. Un documento ISO-8859-1 lo è quasi: bisogna convertire tutte le lettere accentate e gli altri caratteri sopra l’ASCII 127, che in UTF-8 vengono rappresentati con 2 (o più) byte.

UTF-8 codifica i caratteri utilizzando un numero variabile di byte: da 1 a 6. In questo modo si riescono a rappresentare tutti i caratteri codificati dal progetto Unicode, senza però sprecare troppo spazio: per i caratteri di US-ASCII (quelli in assoluto più utilizzati nell’Occidente e - in molti casi - anche nel resto del mondo) basta sempre un byte, e per i caratteri ISO-8859-1 ne bastano sempre 2. La geniale idea di UTF-8 è venuta nel Settembre 1992 a Ken Thompson: la sera del 2 stava cenando in un ristorantino del New Jersey e, come nei film, gli è balenato alla mente il concetto di UTF-8 e l’ha disegnato sulla tovaglia. Grazie, Ken!

Per chi è interessato ad approfondire l’argomento, ecco un paio di link interessanti (in inglese). Se ne troverò altri, li aggiungerò.

  • UTF-8 and Unicode FAQ - spiega bene-bene Unicode, UCS, UTF-8 ed un sacco di altre sigle più o meno oscure. È “tarato” per il mondo Unix/Linux, ma la maggior parte delle informazioni in esso contenute sono valide in generale.
  • Unicode project, tutti i caratteri codificati finora e tutte le news ed eventi sull’Unicode.

Buon UTF-8 a tutti!

Ah, sì, lo so: questo blog e le mie pagine personali sono ancora in utf8. Ancora un attimino, eh! ;-)

Aggiornamento 15 Novembre 2004: il blog e la mia home page sono ora in UTF-8.