Corrector de texto con caracteres raros
Cuando la é se convierte en é y un apóstrofo en ’, las letras casi nunca se han perdido. Algo las leyó con la tabla de caracteres equivocada. Pega el texto y lo leemos de nuevo de la forma correcta.
Texto reparado
reparado mejor suposición, verifica perdido, vuelve a escribirlo · Apunta a una palabra resaltada, o tócala, para ver los caracteres originales.
La reparación se hace en tu navegador. Tu texto no se envía a ningún sitio.
Una letra, dos formas de leerla
Un archivo no contiene letras. Contiene números llamados bytes, y una codificación es la tabla que dice qué número corresponde a qué carácter. Casi todo lo que se escribe hoy usa UTF-8, donde las letras sin acento ocupan un byte, las acentuadas ocupan dos y los signos tipográficos, como las comillas curvas o el signo del euro, ocupan tres.
Windows-1252 es una tabla más antigua en la que cada carácter ocupa exactamente un byte. Si le entregas texto UTF-8 a un programa que lo lee con esa tabla antigua, cada byte sale como un carácter propio. Los dos bytes de é (C3 A9) aparecen como à y ©. Este daño tiene un nombre prestado del japonés, mojibake, y seguramente lo has visto con alguna de estas formas.
| Escrito | Mostrado | Dónde lo ves |
|---|---|---|
| é è | é è | café, crème |
| ü ö ß | ü ö ß | Zürich, Köln, Straße |
| ñ | ñ | señor, España |
| ã ç | ã ç | São Paulo, ação |
| ø å | ø Ã¥ | København, Århus |
| ’ “ — | ’ “ — | don’t, citas textuales, rayas |
| € | € | precios |
Cómo se hace la reparación
La herramienta recorre tu texto y se detiene en cada serie de caracteres de la mitad superior de Windows-1252. Convierte cada uno de nuevo en el byte del que procede y comprueba si esos bytes forman un carácter UTF-8 válido.
Válido significa un byte inicial entre C2 y F4 seguido del número correcto de bytes de continuación (80 a BF), sin formas sobrelargas ni valores sustitutos. Si lo son, la serie se reemplaza por el carácter que codifican. Si no, no cambia nada. Esa prueba es también lo que protege el texto bien escrito. La é de un “café” sano es un solo byte en Windows-1252, y un solo byte nunca puede pasar por un par UTF-8.
Un texto que se dañó, se guardó y se volvió a dañar muestra cadenas más largas como é. La herramienta repite la pasada hasta cinco veces, quitando una capa cada vez, hasta que el texto deja de cambiar.
Cómo leer los tres resaltados
- Reparado
- Los bytes se decodificaron sin problema, así que estos cambios son seguros. Apunta a la palabra para ver qué reemplazó.
- Mejor suposición, verifícalo
- Faltaba un byte y la herramienta rellenó el hueco. Hay dos casos.
Ãseguida de un espacio se lee comoà, porque el segundo byte de esa letra (A0) es también el espacio de no separación y a menudo se aplana a un espacio normal. Unâ€suelto se lee como unas comillas curvas de cierre, porque su tercer byte (9D) no tiene carácter en Windows-1252 y suele desaparecer. La herramienta solo hace estas suposiciones cuando el texto muestra otras señales claras de mojibake. - Perdido, escríbelo otra vez
- Un
�, o un signo de interrogación metido entre dos letras como enr?sum?. Algún programa reemplazó el carácter antes de guardar y ya no queda ningún byte que decodificar. La herramienta marca el lugar y tú pones la letra.
Una  suelta delante de un espacio es la primera mitad de un espacio de no separación. La herramienta la quita y muestra el espacio que queda con una marca tenue, para que lo distingas de uno normal.
Páralo donde empieza
Reparar texto pegado solo trata el síntoma. En algún punto anterior, un programa escribe UTF-8 y otro no lo sabe. Estos son los sitios habituales.
- Un CSV abierto en Excel
- Si haces doble clic en un CSV, Excel da por hecha la antigua tabla de Windows. Usa mejor Datos, Desde texto/CSV, y elige en Origen del archivo
65001: Unicode (UTF-8). Al exportar, elige “CSV UTF-8 (delimitado por comas)”. - Una base de datos MySQL o MariaDB
- Columnas declaradas como
latin1que contienen bytes UTF-8, o un volcado importado con un--default-character-setequivocado. Las tablas y la conexión deben usar ambasutf8mb4. - Una página web
- Pon
<meta charset="utf-8">al principio del<head>y haz que el servidor envíeContent-Type: text/html; charset=utf-8. - Un correo electrónico o un archivo de texto
- En el correo, la cabecera
Content-Type: text/plain; charset=UTF-8. En los archivos, guarda como UTF-8 desde el menú “Guardar con codificación” del editor.
Convertir una base de datos entera no es lo mismo que arreglar un párrafo. Haz una copia de seguridad completa, ejecuta la conversión sobre una copia y compara las filas antes de tocar el sitio real. Una conversión aplicada a un texto que ya era correcto lo daña.
Lo que no puede recuperar
La herramienta trata un solo accidente, que resulta ser con diferencia el más común: UTF-8 leído como Windows-1252 o Latin-1. Cubre cualquier idioma, incluidos el griego y el cirílico, siempre que la confusión haya sido esa. Otros pares quedan fuera, como Mac Roman (donde la é aparece como √©), Windows-1251 y Shift-JIS. La suposición que convierte à más un espacio en à sirve para el italiano, el portugués y otros idiomas que usan esa letra como palabra. En cualquier otro texto, compruébala.
Preguntas frecuentes
¿Por qué la é aparece como é?
El texto se guardó como UTF-8, donde la é son dos bytes, y luego se abrió como Windows-1252, donde cada byte es un carácter propio. Los dos bytes se muestran como à y ©. En esa fase no se pierde nada, y por eso se puede revertir.
¿Qué significa ’ en mi texto?
Es un apóstrofo curvo (’). Ese signo ocupa tres bytes en UTF-8 y cada uno se mostró por separado. El mismo accidente convierte las comillas de apertura en “ y las rayas largas en —.
¿Por qué hay una  antes de los espacios o antes de £?
El espacio de no separación son los dos bytes C2 A0 y el signo de la libra es C2 A3. Leído con la tabla equivocada, el primer byte se convierte en una  visible. La herramienta la quita y conserva el carácter que sigue.
¿Puede arreglar los signos de interrogación y los rombos negros (�)?
No. Aparecen cuando un programa no pudo representar un carácter y lo reemplazó antes de guardar, así que los bytes originales ya no existen. La herramienta resalta cada uno y tú lo escribes de nuevo.
¿Cómo arreglo los caracteres raros en todo un sitio WordPress?
Comprueba que DB_CHARSET en wp-config.php sea utf8mb4 y que las tablas no usen una colación latin1. Si son solo unas pocas páginas, pega cada texto aquí y vuelve a poner la versión reparada. Para toda la base de datos, haz convertir primero las tablas en una copia, con una copia de seguridad a mano.
¿El texto que pego se envía a un servidor?
No. Un script de tu navegador hace la decodificación, y la página no envía ninguna solicitud con tu texto.