UTF-8: Codifica caratteri universale per il Web
UTF-8 (Unicode Transformation Format – 8-bit) è la codifica caratteri dominante per il World Wide Web, usata in oltre il 98% di tutte le pagine web. Rappresenta efficientemente ogni carattere nello standard Unicode – coprendo virtualmente tutti i sistemi di scrittura mondiali – mantenendo compatibilità retroattiva con ASCII.
Come funziona codifica UTF-8
UTF-8 è codifica a larghezza variabile che usa da uno a quattro byte da 8 bit per carattere:
- 1 byte (0xxxxxxx): Copre range ASCII (U+0000 a U+007F). Testo inglese, numeri, simboli base identici ad ASCII.
- 2 byte (110xxxxx 10xxxxxx): Codifica caratteri U+0080 a U+07FF, inclusi latino esteso, greco, cirillico, ebraico, arabo.
- 3 byte (1110xxxx 10xxxxxx 10xxxxxx): Copre Basic Multilingual Plane (BMP) U+0800 a U+FFFF, comprendendo la maggior parte caratteri CJK (cinese, giapponese, coreano) e simboli comuni.
- 4 byte (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx): Rappresenta piani supplementari (U+10000 a U+10FFFF), come emoji, scritture storiche, caratteri rari.
Proprietà chiave che guidano adozione
- Compatibilità retroattiva ASCII: Qualsiasi file ASCII valido è file UTF-8 valido.
- Auto-sincronizzante: Bit iniziali di ogni byte indicano lunghezza sequenza, permettendo decoder recuperare allineamento dopo corruzione o avvio mid-stream.
- Nessun Byte Order Mark (BOM) obbligatorio: A differenza UTF-16/32, UTF-8 non ha problemi endianness; BOM opzionale e spesso omesso.
- Ubiquità: Codifica default per HTML5, XML, JSON, email (MIME), sistemi Linux/Unix, database moderni, linguaggi programmazione.
Confronto con altre codifiche Unicode
- UTF-16: Usa 2 o 4 byte per code unit. Formato stringa interno nativo in Windows, Java, JavaScript, .NET. Richiede BOM per rilevamento endianness.
- UTF-32: Fissi 4 byte per code point. Semplifica indicizzazione caratteri ma inefficiente spazialmente per maggiori testi.
Best Practice
Dichiarare sempre esplicitamente il character set in header HTTP e metadati documento:
Content-Type: text/html; charset=utf-8
Questo previene misinterpretazione (mojibake) e assicura rendering consistente cross-browser e cross-platform.