--- title: "UTF-8: la codifica dei caratteri spiegata" url: https://www.conseolente.it/utf-8-codifica-caratteri-web/ aggiornato: 2026-11-07 descrizione: "Scopri cos'è UTF-8, come funziona la codifica dei caratteri Unicode, le differenze con ASCII e UTF-16, e perché è lo standard del web moderno." topic: "UTF-8 · codifica · caratteri e charset" --- # UTF-8: la codifica dei caratteri spiegata > Versione per assistenti AI. Pagina originale: [UTF-8: la codifica dei caratteri spiegata](https://www.conseolente.it/utf-8-codifica-caratteri-web/?via=md) UTF-8 è la codifica di caratteri che trasforma ogni lettera, numero, simbolo o emoji dello standard Unicode in una sequenza da 1 a 4 byte leggibile dai sistemi digitali. Il meccanismo mantiene piena compatibilità con l’ASCII per i primi 128 caratteri e usa più byte solo per gli alfabeti non latini o le emoji. ## UTF-8 in breve - **Cosa fa:** converte i codepoint Unicode di lettere, numeri, simboli ed emoji in sequenze di 1-4 byte. - **Compatibilità:** i primi 128 caratteri coincidono byte per byte con l’ASCII. - **Diffusione:** circa il 98-99% delle pagine web dichiara UTF-8 come charset, secondo dati 2025-2026. - **Alternative:** UTF-16 e UTF-32 codificano lo stesso standard Unicode con byte diversi o fissi. - **Verifica:** si controlla con il meta tag charset nell’HTML o con l’header Content-Type del server. ## Cos’è UTF-8 UTF-8 è l’abbreviazione di Unicode Transformation Format, 8 bit: indica il metodo con cui i codepoint dello standard Unicode vengono trasformati in byte concreti, salvati su disco o trasmessi in rete. Nell’[HTML](https://www.conseolente.it/hypertext-markup-language-html-cose-perche-linguaggio-markup/) questa codifica si dichiara nel markup della pagina, perché è lì che il browser legge quale charset usare per interpretare il testo. Unicode e UTF-8 non sono la stessa cosa. Unicode è il catalogo che assegna un numero identificativo, chiamato codepoint, a ogni carattere esistente; UTF-8 è uno dei formati che decide come scrivere quel numero in byte. Ogni carattere riconosciuto da Unicode ha un codepoint, e UTF-8 lo traduce in una o più unità da 8 bit, scegliendo automaticamente quante usarne in base al valore numerico del simbolo. Un file scritto solo con lettere dell’alfabeto inglese, cifre e punteggiatura di base è identico, byte per byte, sia in ASCII sia in UTF-8: la differenza emerge quando compaiono accenti, alfabeti non latini o emoji, casi in cui servono byte aggiuntivi per rappresentare correttamente il simbolo. ## Come funziona la codifica UTF-8 ![Sequenza di byte binari che rappresentano la conversione di un carattere in UTF-8](https://www.conseolente.it/wp-content/uploads/2026/10/utf-8-codifica-caratteri-web-1-1-1024x683.webp) Ogni carattere occupa da 1 a 4 byte, in base al valore del suo codepoint Unicode. UTF-8 usa una lunghezza variabile: da 1 a 4 byte per carattere, scelti in base all’intervallo in cui cade il codepoint da rappresentare. Più un carattere è vicino all’inizio della tavola Unicode, meno byte occupa. | Byte usati | Intervallo codepoint | Caratteri tipici | | --- | --- | --- | | 1 byte | U+0000 – U+007F | Lettere e simboli ASCII (128 caratteri) | | 2 byte | U+0080 – U+07FF | Latino esteso, greco, cirillico, arabo, ebraico | | 3 byte | U+0800 – U+FFFF | Maggior parte dei caratteri cinesi, giapponesi, coreani | | 4 byte | U+010000 – U+10FFFF | Emoji, scritture storiche, caratteri CJK rari | Il primo byte di una sequenza multi-byte indica quanti byte di continuazione seguiranno; i byte successivi iniziano sempre con il prefisso 10. Questa struttura rende UTF-8 auto-sincronizzante: un programma individua l’inizio di un carattere partendo da un punto qualsiasi del flusso di dati, tornando indietro al massimo di tre byte. Un effetto collaterale utile riguarda l’ordinamento: una lista di stringhe UTF-8 ordinate byte per byte mantiene lo stesso ordine che si otterrebbe ordinando le stesse stringhe in UTF-32. In un database multilingua, un ordine dei risultati che sembra sbagliato è spesso causato da una collation impostata male, non dalla codifica. ## Differenza tra Unicode e UTF-8 Unicode assegna un codepoint univoco a ogni carattere; UTF-8 è il formato che trasforma quel codepoint in byte. La relazione è quella tra un catalogo e il modo in cui quel catalogo viene salvato su disco. Lo standard Unicode, definito a grandi linee dalla norma ISO 10646, organizza i caratteri in 17 piani da 65.536 posizioni ciascuno. Il piano zero, il **Basic Multilingual Plane**, copre la quasi totalità dei sistemi di scrittura moderni; i piani successivi ospitano scritture storiche, simboli rari ed emoji. Per trasformare i codepoint in byte esistono più formati oltre a UTF-8: UTF-16, UTF-32 e varianti meno diffuse come UTF-7. Tutti rappresentano lo stesso insieme di caratteri con regole di codifica diverse: cambia come il testo viene salvato e trasmesso, non il suo significato. Un equivoco frequente riguarda le nuove versioni di Unicode: aggiungere codepoint, per esempio nuove emoji, non richiede cambiare la codifica. UTF-8 continua a rappresentarli con lo stesso meccanismo a lunghezza variabile, senza aggiornamenti strutturali. ## Differenza tra ASCII e UTF-8 ASCII è un set di caratteri a 7 bit, pubblicato nel 1968, che assegna un numero da 0 a 127 alle lettere dell’alfabeto inglese, alle cifre, alla punteggiatura di base e ad alcuni caratteri di controllo. Da solo non può rappresentare accenti, alfabeti non latini o emoji. UTF-8 include ASCII come primo blocco della propria codifica: i 128 caratteri ASCII occupano un solo byte e hanno lo stesso valore binario in entrambe le codifiche. Un file di testo scritto in puro inglese e salvato come ASCII è quindi già un file UTF-8 valido, senza bisogno di conversioni. La differenza diventa evidente appena il testo include caratteri fuori da quel primo blocco: una lettera accentata, un simbolo cirillico o un’emoji richiedono da 2 a 4 byte in UTF-8, mentre in ASCII puro non sono rappresentabili. I sistemi legacy basati solo su ASCII o su codifiche regionali come ISO-8859-1 generavano spesso testo illeggibile quando ricevevano contenuti multilingua. ### Se il testo contiene solo caratteri inglesi di base Puoi trattare il file come ASCII o come UTF-8 indifferentemente: le due rappresentazioni coincidono byte per byte. ### Se il testo include lettere accentate, alfabeti non latini o emoji Devi dichiarare esplicitamente UTF-8 nel file e nel software che lo legge, altrimenti il programma può interpretare male i byte aggiuntivi e mostrare caratteri illeggibili. ## UTF-8, UTF-16 e UTF-32 a confronto ![Tre blocchi di byte affiancati che mostrano la differenza di lunghezza tra UTF-8, UTF-16 e UTF-32](https://www.conseolente.it/wp-content/uploads/2026/10/utf-8-codifica-caratteri-web-2-1-1024x683.webp) UTF-32 usa sempre 4 byte fissi, UTF-16 ne usa 2 o 4, UTF-8 da 1 a 4. UTF-32 usa sempre quattro byte per ogni carattere: la lunghezza fissa semplifica l’accesso diretto al carattere n-esimo di una stringa, ma spreca memoria nei testi in alfabeto latino, dove basterebbe un byte. UTF-16 è un compromesso: la maggior parte dei caratteri occupa 2 byte, con un’estensione a 4 byte tramite coppie di surrogati per i codepoint più rari. | Codifica | Byte per carattere | Contesto d’uso tipico | | --- | --- | --- | | UTF-8 | 1-4 byte | Web, API, file di testo, compatibilità ASCII | | UTF-16 | 2 o 4 byte | Windows, macOS, Java, testi non latini | | UTF-32 | 4 byte fissi | Elaborazione interna con accesso diretto ai codepoint | ### Se stai sviluppando per il web o devi garantire compatibilità internazionale La scelta è UTF-8: è l’unica codifica raccomandata da W3C e IETF per nuovi documenti e la sola compatibile nativamente con ASCII senza conversioni. ### Se lavori con sistemi basati su Windows, macOS o Java È probabile incontrare UTF-16 come codifica interna: quando uno script, tramite il [Document Object Model](https://www.conseolente.it/document-object-model-dom-cos-e-come-funziona/), legge e manipola il testo della pagina, lavora su stringhe codificate in UTF-16, anche se il documento è servito in UTF-8. La conversione va gestita nei punti di scambio dati con il web o con API esterne. A differenza di UTF-16 e UTF-32, UTF-8 non pone problemi di endianness, l’ordine con cui i byte vengono memorizzati: la sua struttura sequenziale non richiede di specificare se il sistema è big-endian o little-endian. ## Perché UTF-8 è importante UTF-8 è diventato lo standard de facto del web perché risolve un problema concreto: prima della sua diffusione, ogni regione linguistica usava una codifica diversa e incompatibile, e lo scambio di testo tra sistemi con codifiche differenti produceva spesso caratteri illeggibili, il fenomeno noto come mojibake. I vantaggi che spiegano questa diffusione sono tre. Primo, l’autosincronizzazione: un programma riconosce l’inizio di un nuovo carattere guardando i prefissi dei bit, anche leggendo il flusso a partire da un punto intermedio. Secondo, la compatibilità con ASCII: i testi in inglese occupano lo stesso spazio che occuperebbero in ASCII puro, senza sprecare byte. Terzo, la copertura completa di Unicode: la stessa codifica gestisce un’emoji, un ideogramma cinese o una lettera accentata italiana come è, à, ò. Sulla diffusione effettiva risulta numeri diversi, perché misurati in momenti diversi: in una guida di settore aggiornata ad aprile 2025 il dato è del 98,6% dei siti web mondiali; una voce enciclopedica più recente, riferita al 2026, parla del 99,1% delle pagine web trasmesse in UTF-8. Sono due misurazioni in anni diversi, non una contraddizione: praticamente la totalità del web dichiara questa codifica. Una proporzione simile si trova in altri standard ormai universali del web: JavaScript risulta presente nel 98% dei siti web attivi nel 2026, secondo [Linguaggi di Programmazione 2026: Classifica e Tendenze (2026)](https://culturedigitali.eu/notizie/linguaggi-di-programmazione-2026-classifica-e-tendenze/). Organizzazioni come il W3C e l’IETF raccomandano UTF-8 come formato predefinito per i nuovi standard, e i principali sistemi operativi, linguaggi di programmazione e database la supportano nativamente. La codifica dei caratteri influisce sul posizionamento nei motori di ricerca solo in modo indiretto, tramite la leggibilità dei contenuti. Una dichiarazione errata o mancante del charset, però, può generare testo illeggibile nella pagina, con un effetto indiretto sulla qualità percepita dei contenuti: è uno dei controlli di routine in un audit di [SEO tecnica](https://www.conseolente.it/consulente/seo-tecnica/). ## Storia e origine di UTF-8 UTF-8 nasce per risolvere un problema che Unicode da solo non copriva: come trasformare numeri a più bit in byte concreti senza rompere la compatibilità con i sistemi già costruiti su ASCII. Tra il 1988 e il 1991 Joseph D. Becker sviluppò per Xerox il progetto originario di Unicode. Il primo tentativo di trasformazione in byte, UCS-2, convertiva ogni carattere in un valore fisso a 16 bit, incompatibile con ASCII. Il successivo UTF-1 tentò di risolvere il problema, ma le sue sequenze si sovrapponevano in parte ai caratteri ASCII esistenti, generando ambiguità. Nel 1992 Dave Prosser propose il File System Safe UCS Transformation Format, che eliminava la sovrapposizione con ASCII. Ken Thompson e Rob Pike, al lavoro sul sistema operativo Plan 9 nei Bell Labs, perfezionarono la proposta rendendola auto-sincronizzante: la codifica, delineata su una tovaglietta in una tavola calda del New Jersey il 2 settembre 1992, è quella che oggi chiamiamo UTF-8. UTF-8 fu presentato alla conferenza USENIX di San Diego tra il 25 e il 29 gennaio 1993. L’IETF la adottò come riferimento per i futuri standard internet con la RFC 2277 nel gennaio1998; la RFC 3629 del novembre 2003 ne ha ristretto l’intervallo massimo a 4 byte, allineandola ai limiti di UTF-16 ed escludendo i codepoint riservati ai surrogati. ## Come impostare UTF-8 in HTML e lato server Dichiarare correttamente UTF-8 richiede due passaggi distinti: specificarlo nel markup della pagina e, quando possibile, farlo coincidere con l’intestazione inviata dal server. I due livelli devono restare coerenti tra loro, altrimenti il browser rischia di interpretare male i byte ricevuti. 1. Salvare il file sorgente (HTML, PHP, CSS) con codifica UTF-8 senza BOM, usando l’editor di testo o l’ambiente di sviluppo. 2. Aggiungere nell’head del documento HTML, come primo elemento dopo la sua apertura, il meta tag charset UTF-8. 3. Verificare che il server web invii l’intestazione HTTP Content-Type con charset UTF-8, impostandola nella configurazione del server o nel linguaggio lato backend. 4. Controllare che database e connessioni verso di essi usino un set di caratteri coerente, per esempio utf8mb4 per MySQL, per evitare troncamenti sui caratteri a 4 byte come le emoji. 5. Testare la pagina con caratteri accentati, simboli e, se pertinente, alfabeti non latini, verificando la resa in più browser. Un falso allarme frequente riguarda il [caricamento dei font](https://www.conseolente.it/caricamento-dei-font-come-installarli-e-usarli/): anche con una dichiarazione UTF-8 corretta, un carattere può apparire come un quadratino vuoto se il font selezionato non include il glifo di quel codepoint. In quel caso il problema riguarda la copertura dei caratteri del font. ## BOM, caratteri speciali e digitazione Unicode Il BOM è una sequenza opzionale di byte posta all’inizio di un file per segnalare quale codifica Unicode viene usata. In UTF-8 non è necessario, perché la codifica non ha problemi di ordine dei byte, ma alcuni programmi, in particolare su Windows, lo aggiungono comunque: può causare errori in script o file di configurazione che si aspettano testo privo di byte iniziali aggiuntivi. Per “caratteri speciali” si intende qualunque simbolo che esce dall’alfabeto latino di base: lettere accentate, simboli di valuta, frecce, emoji. La lettera “m” non rientra in questa categoria: è un carattere ASCII standard, codificato con un solo byte sia in ASCII sia in UTF-8. Digitare direttamente un codepoint Unicode dipende dal sistema operativo: su Windows si digita il codice esadecimale tenendo premuto Alt e usando il tastierino numerico, su macOS si usa il visualizzatore di caratteri e simboli, mentre nei browser e nelle app di messaggistica i caratteri speciali e le emoji sono accessibili tramite le tastiere native, che gestiscono internamente la codifica UTF-8 del testo inviato. Su un’app di messaggistica non esiste un “carattere migliore” in termini tecnici: qualunque simbolo o emoji supportato da Unicode viene trasmesso correttamente perché l’app gestisce i messaggi in UTF-8. La scelta del simbolo resta una questione di stile personale. ## Errori frequenti e casi limite di UTF-8 Non tutte le sequenze di byte sono UTF-8 valido: un decoder corretto riconosce ed esclude alcuni pattern anomali, perché la loro accettazione può aprire falle di sicurezza oltre a generare testo illeggibile. Mojibake Visualizzazione di caratteri incomprensibili causata da una codifica dichiarata diversa da quella effettivamente usata nel file o nella trasmissione. Overlong encoding Codifica di un carattere con più byte del necessario, per esempio usando 2 byte per un carattere ASCII che ne richiederebbe 1; va sempre considerata un errore e mai decodificata, perché è stata sfruttata in passato per bypassare controlli di sicurezza in server web come IIS e Apache Tomcat. Byte di continuazione isolato Un byte compreso tra 0x80 e 0xBF che compare all’inizio di un carattere, invece che dopo un byte guida, segnala una sequenza corrotta. Sequenza oltre U+10FFFF Una combinazione di byte che decodificherebbe un valore superiore al limite massimo di Unicode non è valida e va respinta dal decoder. ### Se compaiono riquadri o simboli casuali al posto del testo Verifica che la dichiarazione di charset nel file, nel server e nel database corrispondano tutte a UTF-8: una sola di queste in disaccordo con le altre è la causa più comune di mojibake. ### Se le emoji o i caratteri rari vengono troncati nel database Controlla che la codifica della tabella e della connessione al database supportino i 4 byte dei codepoint supplementari, non solo i 3 byte del Basic Multilingual Plane. ## Tabella caratteri UTF-8 più comuni Una tabella UTF-8 mette in relazione il carattere visibile, il suo codepoint Unicode e la sequenza di byte con cui viene salvato: è lo strumento utile per diagnosticare un problema di codifica o per verificare come un simbolo viene rappresentato in memoria. | Carattere | Codepoint Unicode | Byte in UTF-8 | | --- | --- | --- | | A | U+0041 | 1 byte (0x41) | | à | U+00E0 | 2 byte | | € | U+20AC | 3 byte | | 😀 | U+1F600 | 4 byte | Il criterio resta quello già descritto per la lunghezza variabile: più il codepoint è numericamente alto e raro, più byte servono per rappresentarlo. Una tabella completa di tutti i codepoint Unicode conterebbe oltre un milione di voci; per questo gli strumenti pratici di consultazione mostrano solo i blocchi più usati, come latino, simboli di valuta, punteggiatura ed emoji. Per i simboli ASCII di base la tabella coincide con quella storica a 128 posizioni: ogni codice si legge come valore decimale o esadecimale a 7 bit, identico sia in ASCII sia nel primo blocco di UTF-8. ## Domande frequenti ### Che cos’è UTF-8? UTF-8 è una codifica di caratteri a lunghezza variabile, da 1 a 4 byte, che trasforma i codepoint dello standard Unicode in sequenze di byte leggibili dai computer. È compatibile al 100% con ASCII per i primi 128 caratteri. ### Cosa significa l’acronimo UTF? UTF sta per Unicode Transformation Format, formato di trasformazione di Unicode: indica una famiglia di metodi, tra cui UTF-8, UTF-16 e UTF-32, che convertono i numeri Unicode in byte concreti, ciascuno con una propria logica di lunghezza. ### Qual è la differenza tra Unicode e ASCII? ASCII è un set chiuso di 128 caratteri a 7 bit pensato per l’inglese; Unicode è uno standard aperto che assegna un codepoint a oltre un milione di caratteri di tutte le lingue del mondo, incluse le emoji. ASCII coincide con il primo blocco di Unicode. ### Come si digitano i caratteri speciali o Unicode sulla tastiera? Dipende dal sistema operativo: Windows permette l’inserimento tramite codice esadecimale con Alt più tastierino numerico, macOS offre un visualizzatore dedicato di caratteri e simboli, le app mobile gestiscono emoji e simboli con tastiere native che producono direttamente testo UTF-8. ### È vero che UTF-8 trasforma ogni carattere Unicode in una sequenza di 1-4 byte? Sì: è la definizione tecnica della codifica. I caratteri comuni, vicini all’inizio della tavola Unicode, occupano meno byte; i caratteri rari, gli alfabeti non latini e le emoji ne richiedono fino a 4. ### Esiste una tabella con tutti i caratteri UTF-8? Una tabella completa conterebbe oltre un milione di codepoint; per questo gli strumenti pratici mostrano solo i blocchi più usati, come i caratteri latini, i simboli di valuta, la punteggiatura e le emoji più comuni, con il relativo numero di byte richiesto. ### Cos’è il BOM in UTF-8 e serve sempre? Il Byte Order Mark è una sequenza opzionale a inizio file che segnala la codifica usata. In UTF-8 non è necessario, perché la codifica non ha ambiguità di ordine dei byte, e in alcuni script o file di configurazione la sua presenza può generare errori. ## Fonti e riferimenti - [Linguaggi di Programmazione 2026: Classifica e Tendenze (2026)](https://culturedigitali.eu/notizie/linguaggi-di-programmazione-2026-classifica-e-tendenze/) google.com