Correttore di caratteri strani

Quando é diventa é e un apostrofo diventa ’, di solito le lettere non sono perse. Qualcosa le ha lette con la tabella di caratteri sbagliata. Incolla il testo e lo rileggiamo nel modo giusto.

Testo riparato

riparato ipotesi migliore, da verificare perso, riscrivilo · Punta una parola evidenziata, o toccala, per vedere i caratteri originali.

La riparazione avviene nel tuo browser. Il tuo testo non viene inviato da nessuna parte.

Una lettera, due modi di leggerla

In un file non ci sono lettere. Ci sono numeri chiamati byte, e una codifica è la tabella che dice quale numero corrisponde a quale carattere. Quasi tutto ciò che si scrive oggi usa UTF-8: le lettere semplici occupano un byte, quelle accentate due e i segni tipografici come le virgolette curve o il simbolo dell’euro tre.

Windows-1252 è una tabella più vecchia in cui ogni carattere occupa esattamente un byte. Se dai un testo UTF-8 a un programma che lo legge con quella vecchia tabella, ogni byte diventa un carattere a sé. I due byte di é (C3 A9) appaiono come à e ©. Il danno ha un nome preso in prestito dal giapponese, mojibake, e probabilmente l’hai già incontrato in una di queste forme.

ScrittoVisualizzatoDove lo incontri
é èé ècafé, crème
ü ö ßü ö ßZürich, Köln, Straße
ññseñor, España
ã çã çSão Paulo, ação
ø åø Ã¥København, Århus
’ “ —’ “ —apostrofi, discorsi tra virgolette, trattini
€â‚¬prezzi

Come avviene la riparazione

Lo strumento scorre il testo e si ferma a ogni sequenza di caratteri della metà superiore di Windows-1252. Riconverte ciascuno nel byte da cui proviene, poi verifica se quei byte formano un carattere UTF-8 valido.

Valido significa un byte iniziale tra C2 e F4 seguito dal giusto numero di byte di continuazione (da 80 a BF), senza forme troppo lunghe e senza valori surrogati. Se è così, la sequenza viene sostituita dal carattere che codifica. Se no, non cambia nulla. È anche questo controllo a proteggere il testo scritto correttamente. La é di un “café” sano è un solo byte in Windows-1252, e un solo byte non può mai passare per una coppia UTF-8.

Un testo danneggiato, salvato e danneggiato di nuovo mostra catene più lunghe come é. Lo strumento ripete il passaggio fino a cinque volte, togliendo uno strato ogni volta, finché il testo non cambia più.

Come leggere i tre evidenziatori

Riparato
I byte si sono decodificati senza problemi, quindi queste modifiche sono sicure. Passa sulla parola per vedere cosa ha sostituito.
Ipotesi, da verificare
Mancava un byte e lo strumento ha colmato il vuoto. I casi sono due. à seguito da uno spazio viene letto come à, perché il secondo byte di quella lettera (A0) è anche lo spazio non separabile e spesso viene ridotto a uno spazio normale. Un †isolato viene letto come virgoletta curva di chiusura, perché il suo terzo byte (9D) non ha alcun carattere in Windows-1252 e tende a sparire. Lo strumento fa queste ipotesi solo quando il testo mostra altri segni chiari di mojibake.
Perso, riscrivilo
Un �, o un punto interrogativo incastrato tra due lettere come in r?sum?. Un programma ha sostituito il carattere prima di salvare e non resta nessun byte da decodificare. Lo strumento segna il punto e la lettera la metti tu.

Una  isolata davanti a uno spazio è la prima metà di uno spazio non separabile. Lo strumento la rimuove e mostra lo spazio che resta con un segno leggero, così lo distingui da uno normale.

Fermalo dove nasce

Riparare il testo incollato cura solo il sintomo. Da qualche parte a monte, un programma scrive in UTF-8 e un altro non lo sa. Ecco i punti abituali.

Un CSV aperto in Excel
Con un doppio clic su un CSV, Excel presume la vecchia tabella di Windows. Passa invece da Dati, Da testo/CSV, e imposta Origine file su 65001: Unicode (UTF-8). In esportazione, scegli “CSV UTF-8 (delimitato da virgole)”.
Un database MySQL o MariaDB
Colonne dichiarate latin1 che contengono byte UTF-8, oppure un dump importato con il --default-character-set sbagliato. Le tabelle e la connessione devono usare entrambe utf8mb4.
Una pagina web
Metti <meta charset="utf-8"> per primo nel <head> e fai inviare al server Content-Type: text/html; charset=utf-8.
Un’e-mail o un file di testo
Per la posta, l’intestazione Content-Type: text/plain; charset=UTF-8. Per i file, salva in UTF-8 dal menu “Salva con codifica” dell’editor.

Convertire un intero database non è lo stesso lavoro che sistemare un paragrafo. Fai un backup completo, esegui la conversione su una copia e confronta le righe prima di toccare il sito in produzione. Una conversione applicata a un testo già corretto lo danneggia.

Cosa non può recuperare

Lo strumento gestisce un solo incidente, che è di gran lunga il più comune: UTF-8 letto come Windows-1252 o Latin-1. Copre qualsiasi lingua, greco e cirillico compresi, purché lo scambio sia stato quello. Altre coppie restano fuori, come Mac Roman (dove é appare come √©), Windows-1251 e Shift-JIS. L’ipotesi che trasforma à più uno spazio in à va bene per l’italiano, il portoghese e le altre lingue che usano quella lettera come parola. In qualsiasi altro testo, controllala.

Domande frequenti

Perché é appare come é?

Il testo è stato salvato in UTF-8, dove é occupa due byte, poi aperto come Windows-1252, dove ogni byte è un carattere a sé. I due byte vengono mostrati come à e ©. A quel punto non si è perso nulla, ed è per questo che si può annullare.

Cosa significa ’ nel mio testo?

È un apostrofo curvo (’). Quel segno occupa tre byte in UTF-8, e ognuno è stato mostrato separatamente. Lo stesso incidente trasforma le virgolette di apertura in “ e le lineette lunghe in —.

Perché c’è una  prima degli spazi o prima di £?

Lo spazio non separabile è formato dai due byte C2 A0 e il simbolo della sterlina da C2 A3. Letti con la tabella sbagliata, il primo byte diventa una  visibile. Lo strumento la rimuove e mantiene il carattere che segue.

Può correggere punti interrogativi e rombi neri (�)?

No. Compaiono quando un programma non è riuscito a rappresentare un carattere e lo ha sostituito prima di salvare, quindi i byte originali sono spariti. Lo strumento li evidenzia uno per uno e tu li riscrivi.

Come correggo i caratteri strani su un intero sito WordPress?

Verifica che DB_CHARSET in wp-config.php sia utf8mb4 e che le tabelle non usino una collation latin1. Se si tratta solo di poche pagine, incolla qui ogni testo e rimetti la versione riparata. Per l’intero database, fai convertire prima le tabelle su una copia, con un backup a portata di mano.

Il testo che incollo viene inviato a un server?

No. La decodifica la fa uno script nel tuo browser, e la pagina non invia alcuna richiesta con il tuo testo.