También disponible en: English · Português · Français · العربية
Arreglar caracteres raros en un texto (mojibake)
Repara el texto que se escribió en UTF-8 y se leyó con la tabla equivocada, y te enseña exactamente qué ha cambiado.
¿Qué es el mojibake?
Un archivo guarda bytes. Una codificación de caracteres es el acuerdo que convierte esos bytes en letras, y el mojibake aparece cuando quien escribe y quien lee usan acuerdos distintos. El texto se escribió en UTF-8, donde la é son los dos bytes C3 A9, y algo lo leyó después con una tabla de un byte en la que esos dos bytes son dos letras separadas: Ã y ©. No se ha corrompido nada por el camino. Los bytes están intactos y se están leyendo con el manual equivocado.
Por eso el destrozo es tan reconocible. Ã, Â, â y € se amontonan delante de las letras acentuadas, un apóstrofo se convierte en ’ y una raya en –. En cuanto conoces la forma, se lee solo: ’ es siempre una comilla tipográfica derecha vista a través de Windows-1252.
También significa que la reparación es exacta y no una conjetura. Si los bytes sobrevivieron, devolver cada carácter al byte del que salió y leer esos bytes como UTF-8 recupera el texto original: no algo parecido, el original. Sobre los 1.112.032 puntos de código que Unicode puede asignar, ese viaje de ida y vuelta a través de Windows-1252 sale bien todas y cada una de las veces.
Cómo arreglarlo
- Pega el texto estropeado. Funciona mejor de campo en campo, de nombre en nombre o de línea en línea. Cada línea se repara por su cuenta, así que un documento con una columna rota y once buenas no es problema.
- Lee el resultado y después las parejas de debajo. Cada carácter del resultado aparece junto a los caracteres exactos que sustituyó. Si é pasó a é y ’ pasó a un apóstrofo, la reparación es correcta. Si en esa lista hay algo que querías conservar, no lo es.
- Cópialo de vuelta. Si no se repara nada, el panel dice cuál de los dos motivos se aplica: el texto ya está limpio, o ninguna tabla explica todos sus caracteres.
Por qué esta herramienta se niega más que otras
Una herramienta de reparación tiene un fallo del que nadie habla: reescribir texto que nunca estuvo roto. Es peor que no hacer nada, porque el resultado parece plausible y quien lo lee no tiene motivo para comprobarlo.
La medición es fácil de hacer y este sitio tiene 19.655 líneas de prosa correcta en español, portugués, francés y árabe en sus propias páginas. Con ftfy, la implementación de referencia sobre la que se construye casi todo, la función más evidente reescribe 2514 de ellas —el 12,8 por ciento— porque además endereza las comillas tipográficas, que no tienen nada que ver con la codificación. Su función cuidadosa reescribe cinco. Cuatro de esas cinco son el mismo párrafo que explica qué es una codificación de caracteres, en cuatro idiomas, porque ese párrafo cita el mojibake que está describiendo. La quinta es una frase en portugués sobre la letra Ã.
Esta herramienta no reescribe ninguna, por un motivo estructural: repara la línea entera de una vez. Cada carácter tiene que corresponder a un byte y toda la cadena de bytes tiene que ser UTF-8 válido, así que una sola letra acentuada de verdad en cualquier otro punto de la línea veta la reparación. En la frase francesa, las palabras là où aportan los bytes E0 20, que ninguna secuencia UTF-8 puede ser, y la línea se queda como está.
El precio es real y conviene conocerlo. Si tu mojibake sufrió además otro daño —un espacio duro convertido en espacio normal por un servidor de correo, por ejemplo—, la cuenta de bytes deja de cuadrar y esta herramienta se negará donde otra más permisiva adivinaría. Pega un fragmento más corto y muchas veces funcionará.
Límites honestos
Solo se prueban tablas de un byte. Veintisiete por defecto, más Mac Roman detrás de una casilla. Mac Roman se queda fuera por un motivo medido y no por una corazonada: coloca la comilla tipográfica en un byte que abre una secuencia UTF-8, así que un francés normal como l’échelle parece mojibake válido, y es la única de las veintiocho tablas que se dispara con prosa que nunca estuvo rota.
No todas las tablas se pueden deshacer. Diecinueve de las veintiocho asignan los 256 bytes, y el mojibake que pasa por ellas siempre es reversible. Las otras nueve dejan bytes sin asignar —ISO-8859-6 deja 45— y un byte que cayó en uno de esos se sustituyó al leer el texto por primera vez, así que ya se había perdido antes de llegar aquí. El panel te dice en cuál de los dos casos estás.
A veces más de una tabla explica el mismo texto y no coinciden. Se muestra la lectura más probable y las demás se enumeran en vez de esconderse, porque el texto por sí solo no dice cuál es la correcta. El mojibake latino suele explicarse igual con una docena de tablas; el cirílico normalmente solo con una.
Hay un carácter que requiere cuidado aunque todo lo demás salga bien. Una marca de orden de bytes al principio de la línea, U+FEFF, la borra cualquier decodificador de UTF-8 salvo que se le diga explícitamente que la conserve. Aquí se le dice, y es una diferencia de una línea que casi todas las implementaciones olvidan.
Por último, ninguna herramienta distingue un ejemplo citado de un destrozo real. Una página sobre mojibake contiene mojibake a propósito. Por eso los cambios se muestran emparejados en lugar de aplicarse en silencio.
¿Por qué es gratis?
Todo ocurre en tu navegador. Las tablas de carácter a byte no viajan con la página: se leen del propio decodificador de tu navegador, byte a byte, lo que no cuesta nada y hace que la respuesta sea lo que tu navegador cree de verdad que es cada tabla.
No se sube nada. No hay servidor que pagar, así que no hay cuenta, ni límite, ni marca de agua.