¿Cómo se convierte "Mérida" en "Mérida"?
Sigue los bytes de una palabra de un programa a otro, reconoce los dos tipos de acento roto y repara una columna que ya llegó así.
Curso gratis. Tu Maestro, una IA, .
Ya sabes que "Mérida" guardada en UTF-8 son siete bytes: 4D C3 A9 72 69 64 61. Cinco son letras sin acento y dos, C3 A9, son la é. Ahora sigue esos bytes cuando otro programa abre el archivo.
Alguien escribe Mérida
en el sistema de pedidos
Se guarda en UTF-8
4D C3 A9 72 69 64 61Otro programa abre el archivo
Camino 1 de 2: lo lee como UTF-8
Ves Mérida
C3 A9se leen juntos: é
Aquí termina.
Camino 2 de 2: lo lee como Windows-1252
Ves Mérida
C3se lee à yA9se lee ©
Aquí termina.
Windows-1252 da un byte a cada letra, así que lee C3 como una letra (Ã) y A9 como otra (©). La é se convierte en dos caracteres, y el primero casi siempre es una Ã. Esto tiene nombre: mojibake, el texto que sale cuando se leen bytes con la tabla equivocada. Así se ven algunas ciudades de los clientes de El Nopal cuando un archivo en UTF-8 se lee como Windows-1252 (lo corrimos en Python):
| Se escribió | Se lee |
|---|---|
| Querétaro | Querétaro |
| León | León |
| Mazatlán | Mazatlán |
| Tlajomulco de Zúñiga | Tlajomulco de Zúñiga |
| Miscelánea El Güero | Miscelánea El Güero |
El patrón es tan regular que se reconoce de lejos: una secuencia como é es compatible con UTF-8 leído como Windows-1252 o Latin-1. Es una pista para comprobar, no una identificación única de la codificación.
El camino al revés
Ahora el caso contrario: el sistema viejo de una sucursal guarda en Windows-1252, y lo abre un programa que espera UTF-8. La é es un solo byte, E9, y en UTF-8 ese byte suelto no forma ninguna letra válida. El programa tiene dos salidas: detenerse con un error, o poner en su lugar el signo de reemplazo, �, y seguir. Así queda "M�rida".
Ese rombo con signo de interrogación es peor noticia que la Ã. El programa ya tiró el byte que no entendió, así que desde ese texto no hay forma de saber qué letra era. La reparación es volver al archivo original y leerlo con la codificación correcta. pandas, por ejemplo, elige la primera salida: se detiene. Predice qué pasa:
pandas abre un archivo del sistema viejo
Ejemplo 1 de 2
import pandas as pd# Así guarda el archivo el sistema viejo de la sucursal: en Windows-1252.with open("clientes.csv", "w", encoding="cp1252") as archivo: archivo.write("cliente,ciudad\nPapelería La Única,Mérida\nMiscelánea El Güero,León\n")print(pd.read_csv("clientes.csv"))Adivinar está bien. Lo que escribas se queda en este navegador y te espera en tu curso.
Ejemplo 2 de 2, se abre cuando expliques este
Cuando el texto ya llegó roto
A veces no tienes el archivo original. Contabilidad abrió el CSV en Excel, vio "Mérida", y lo guardó así; ahora el texto roto es el contenido. Si confirmas esa cadena de conversiones y no se perdieron bytes, puedes intentar deshacerla. Una à por sí sola no garantiza que esta receta sea la correcta. Sigue el razonamiento paso a paso; intenta cada paso antes de abrirlo.
Reparar un nombre que llegó como Miscelánea El Güero
Ejemplo resuelto · 4 pasos
En la columna cliente del reporte de contabilidad aparece "Miscelánea El Güero". No tienes el archivo original. ¿Cómo recuperas el nombre sin reescribirlo a mano?
Piensa el siguiente paso por tu cuenta y luego ábrelo para comparar.
Inténtalo
Ahora la columna completa. Cambia una sola línea para que cada nombre salga reparado. Si no sabes qué línea cambiar, pídele una pista a tu Maestro.
La columna de este ejercicio contiene solo ejemplos con la misma conversión conocida. En una columna mixta, separa y revisa los casos antes de aplicar la reparación; conserva siempre el original.
Tu turno
Estos son los clientes del reporte de contabilidad, tal como llegaron. Cambia la línea de reparado para que cada nombre salga bien escrito. Ya quedó cuando se imprimen Papelería La Única, Miscelánea El Güero, Abarrotes Doña Peña y Farmacia San José.
Tab agrega sangría; Esc y Tab para salir
Error común: Reparar es el último recurso
Si tienes el archivo original, no repares texto: léelo con la codificación correcta (encoding="utf-8" o encoding="cp1252"). Reparar sirve para lo que ya alguien guardó roto, y solo una vez por texto.
Un vistazo para decidir
Los dos síntomas de esta página se reconocen de lejos, y cada uno pide algo distinto:
| Lo que ves | Qué pudo pasar | Qué compruebas |
|---|---|---|
à junto a otra letra (é, ó) | UTF-8 pudo leerse como Windows-1252 o Latin-1 | Lo lees de nuevo con encoding="utf-8"; si ya está guardado así, lo reparas con encode("cp1252").decode("utf-8") |
� donde iba la letra | Una conversión reemplazó bytes que no pudo interpretar; el símbolo no identifica la codificación original | Vuelves al archivo original y confirmas su codificación antes de leerlo |
UnicodeDecodeError al leer | Un programa que espera UTF-8 se topó con bytes que no lo son | Consultas el origen; si indica Windows-1252, pruebas encoding="cp1252" y verificas varios nombres y símbolos |
Una advertencia honesta: la reparación no siempre se puede. La Í en UTF-8 son los bytes C3 8D, y en el entorno de práctica "Í".encode("utf-8").decode("cp1252") falla, porque Windows-1252 deja sin definir el byte 8D. Si te topas con un nombre así, la salida es la de siempre: volver al archivo original. Si no sabes en cuál de los tres casos estás, pégale a tu Maestro lo que ves.
Comprueba lo que sabes: En el reporte de una sucursal aparece "Le�n", con un rombo y un signo de interrogación. ¿Qué pasó y qué haces?