Che cos’è UTF-8
Per capire la codifica e decodifica UTF-8 bisogna partire da qui: in un computer ogni testo è memorizzato come numeri. Unicode è l’elenco generale che assegna a ogni carattere un numero, chiamato code point. La lettera A è U+0041, é è U+00E9 e il simbolo dell’euro € è U+20AC. UTF-8 è la regola che trasforma questi code point in byte.
UTF-8 è la codifica standard del web, del JSON, della maggior parte dei linguaggi di programmazione e dei sistemi operativi moderni. Il suo pregio principale è che il testo ASCII semplice resta invariato: A è sempre il singolo byte 41. Gli altri caratteri usano due, tre o quattro byte, e ognuno di questi byte vale 128 o più, quindi non si possono mai confondere con l’ASCII.
Come usare lo strumento UTF-8
Codificare. Scrivi nel riquadro Testo. I byte UTF-8 compaiono nel riquadro Byte UTF-8. Premi Copia per prenderli.
Decodificare. Incolla i byte nel riquadro Byte UTF-8. I caratteri compaiono a sinistra. Assicurati che il Formato dei byte corrisponda a ciò che incolli.
Formato dei byte offre sei modi per scrivere i byte:
- Byte esadecimali: C3 A9 per leggere e fare debug
- Escape: \xC3\xA9 per le stringhe letterali nel codice
- Percentuale: %C3%A9 come negli indirizzi web
- Decimale: 195 169 per gli array di byte
- Binario: 11000011 10101001 per capire come sono disposti i bit
- Testo corrotto: é (correggi mojibake) per riparare un testo letto con la codifica sbagliata
Carattere per carattere. La tabella sotto lo strumento elenca ogni carattere con il suo code point, i suoi byte UTF-8 e il numero di byte. Il riepilogo mostra il totale di caratteri e di byte. Spazi, tabulazioni e a capo vengono indicati per nome, così li vedi.
Come funziona UTF-8
Il numero di byte dipende dalla grandezza del code point:
| Code point | Byte | Schema dei bit |
|---|---|---|
| Da U+0000 a U+007F | 1 | 0xxxxxxx |
| Da U+0080 a U+07FF | 2 | 110xxxxx 10xxxxxx |
| Da U+0800 a U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| Da U+10000 a U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Il primo byte indica quanti byte seguono. Ogni byte successivo inizia con 10. Questo rende UTF-8 autosincronizzante: un programma riesce sempre a trovare l’inizio del carattere successivo, anche a metà di un flusso di dati.
Esempi
| Carattere | Code point | UTF-8 esadecimale | Decimale |
|---|---|---|---|
A |
U+0041 | 41 |
65 |
é |
U+00E9 | C3 A9 |
195 169 |
ñ |
U+00F1 | C3 B1 |
195 177 |
ß |
U+00DF | C3 9F |
195 159 |
€ |
U+20AC | E2 82 AC |
226 130 172 |
日 |
U+65E5 | E6 97 A5 |
230 151 165 |
| emoji del pollice in su | U+1F44D | F0 9F 91 8D |
240 159 145 141 |
Tutte le vocali accentate dell’italiano rientrano nell’intervallo dei due byte: è (U+00E8) è C3 A8, à (U+00E0) è C3 A0, ù (U+00F9) è C3 B9.
Correggere il mojibake
Il mojibake è l’accozzaglia di simboli che vedi quando i byte UTF-8 vengono letti come Windows-1252 o Latin-1. Ogni byte diventa un carattere a sé, quindi le lettere da due byte diventano due simboli strani:
| Testo corretto | Come appare |
|---|---|
café |
café |
naïve |
naïve |
It’s |
It’s |
€ |
€ |
Nei testi italiani succede spesso: perché appare come perché ed è come è. Il formato Testo corrotto annulla l’errore: ritrasforma ogni carattere corrotto nel suo byte e decodifica i byte come UTF-8. Se il testo contiene caratteri che non possono derivare da questo errore, lo strumento te lo dice invece di tirare a indovinare.
Consigli e limiti
- Salva i file in UTF-8. La maggior parte del mojibake nasce da un file salvato con una codifica e aperto con un’altra. Negli editor, scegli UTF-8 quando salvi.
- Dichiara la codifica. In HTML, metti
<meta charset="utf-8">in cima alla pagina. - Excel e file CSV. Le versioni meno recenti di Excel tirano a indovinare la codifica di un CSV. Salvare come “CSV UTF-8” evita gli accenti rovinati.
- La correzione funziona una volta. Un testo corrotto due volte richiede di applicare la correzione due volte.
- La tabella mostra fino a 500 caratteri per mantenere veloce la pagina. Il conteggio dei byte copre sempre tutto il testo.
Altri modi per farlo
Python. 'café'.encode('utf-8') restituisce b'caf\xc3\xa9'. Per correggere il mojibake, 'café'.encode('cp1252').decode('utf-8') restituisce café.
JavaScript. new TextEncoder().encode('é') restituisce i byte 195 e 169. new TextDecoder().decode(bytes) li ritrasforma in testo.
Riga di comando. echo -n é | xxd mostra i byte c3a9 in un terminale UTF-8. iconv -f WINDOWS-1252 -t UTF-8 converte file interi.
Strumenti correlati
Per decodificare semplici byte esadecimali, usa il convertitore da esadecimale a testo. I byte codificati con % nei link si gestiscono con la decodifica URL. Per vedere tutti i bit, prova il traduttore di codice binario.