RUNWEBTOOLS
Italiano
Formati di dati & codifica

Codifica dei caratteri: Unicode e UTF-8 spiegati

Aggiornato 2026-07-06

L'hai visto: un nome che dovrebbe leggersi José compare come José, o un'emoji diventa un riquadro di punti interrogativi. Quel pasticcio ha un nome — mojibake — ed è quasi sempre un disallineamento di codifica dei caratteri. Questa guida spiega cosa sono davvero i caratteri, Unicode e UTF-8, così questi bug smettono di essere misteriosi.

I computer memorizzano numeri, non lettere

Al livello più basso un computer memorizza solo numeri (byte). Per memorizzare del testo serve una tabella condivisa che associ ogni carattere a un numero, e viceversa. Quella tabella è una codifica dei caratteri. Se un programma scrive testo con una tabella e un altro lo legge con una diversa, i numeri vengono interpretati come i caratteri sbagliati — e ottieni il mojibake.

ASCII: il piccolo inizio

La codifica originaria e diffusa, ASCII, definiva numeri per 128 caratteri: l'alfabeto inglese, cifre, punteggiatura e alcuni codici di controllo. Sufficiente per l'inglese, ma nessuno spazio per é, ü, ß, , 😀 né per le decine di migliaia di caratteri delle lingue del mondo. Per decenni ognuno ha inventato le proprie estensioni incompatibili, ed è proprio per questo che il testo si rompeva passando da un sistema all'altro.

Unicode: un numero per ogni carattere

Unicode è la soluzione universale: un unico standard che assegna un numero univoco — chiamato code point — a ogni carattere di ogni sistema di scrittura, più simboli ed emoji. I code point si scrivono come U+ seguito da un numero esadecimale:

A   →  U+0041
é   →  U+00E9
你  →  U+4F60
😀  →  U+1F600

Fondamentale: Unicode definisce i numeri ma non come memorizzarli in byte. Questa è una decisione a parte — ed è qui che entra UTF-8.

UTF-8: come Unicode diventa byte

UTF-8 è un modo di codificare i code point Unicode in byte, ed è quello che il web usa in modo schiacciante. Il suo ingegnoso design è di essere a lunghezza variabile:

  • I 128 caratteri ASCII occupano 1 byte ciascuno — quindi UTF-8 è retrocompatibile con ASCII.
  • La maggior parte dei caratteri latini accentati e di quelli greci/cirillici occupa 2 byte.
  • La maggior parte degli altri sistemi di scrittura, tra cui cinese, giapponese e coreano, occupa 3 byte.
  • Emoji e caratteri più rari occupano 4 byte.

Ecco perché una stringa di «100 caratteri» non è sempre 100 byte: un carattere può essere più byte. Spiega anche il classico bug José — sono i byte UTF-8 di é letti per errore, un byte alla volta, come una vecchia codifica occidentale.

Caratteri, code point e byte

Tre concetti correlati ma diversi fanno inciampare le persone di continuo:

  • Carattere (Character) — ciò che vede un umano (la lettera é).
  • Code point — il numero Unicode per esso (U+00E9).
  • Byte — come viene memorizzato (in UTF-8, i due byte 0xC3 0xA9).

Vedere un code point scritto per esteso è spesso il modo più rapido per diagnosticare un problema di testo — per esempio, uno «spazio» che si rivela essere uno spazio unificatore (U+00A0). Il nostro convertitore Unicode mostra i code point dietro qualsiasi testo e converte tra caratteri e sequenze di escape.

Come evitare il mojibake

  • Usa UTF-8 ovunque. Salva i file come UTF-8 e dichiaralo — nelle pagine web, <meta charset="utf-8">; in HTTP, il charset di Content-Type; nei database, una collazione UTF-8.
  • Mantienilo coerente da un capo all'altro. La maggior parte della corruzione avviene a un confine dove un lato presume una codifica diversa.
  • Fai l'escape per il contesto giusto. Per mettere caratteri speciali in sicurezza nell'HTML, usa le entità HTML; per metterli in una URL, la codifica URL.

In breve: Unicode dà a ogni carattere un numero, UTF-8 trasforma quei numeri in byte, e se tutti concordano di usare UTF-8, il testo smette di rompersi.

Altro su Formati di dati & codifica

Vedi tutte le guide di Formati di dati & codifica →

Strumenti citati in questa guida