Mojibake: qué es el texto ilegible por errores de codificación de caracteres

Descubre qué es el mojibake, por qué aparece el texto ilegible por errores de codificación y cómo solucionarlo con Unicode y UTF-8 para mostrar caracteres correctamente.

Autor: Leandro Alegsa

Mojibake (文字化け, pronunciado /modʑibake/) es el nombre de los caracteres incorrectos e ilegibles que se muestran cuando el software informático no muestra el texto correctamente. Cuando se utilizan ordenadores, el texto se codifica mediante una codificación de caracteres. En la transferencia, cada carácter se sustituye por su posición (o número) en la codificación. Para volver a mostrar el carácter, la posición se sustituye de nuevo por el carácter. Cuando no se especifica la codificación original, se puede utilizar un carácter diferente al sustituir de nuevo el número por el carácter para su visualización. Unicode se introdujo para resolver este problema: UTF-8 es capaz de codificar los caracteres más comunes en 2 bytes.

Nota aclaratoria: la frase anterior refleja una idea común pero simplificada. UTF-8 es una codificación de longitud variable que utiliza entre 1 y 4 bytes por carácter: muchos caracteres ASCII ocupan 1 byte; caracteres acentuados y de otros alfabetos suelen ocupar 2 bytes; caracteres menos frecuentes requieren 3 o 4 bytes. La adopción general de Unicode y UTF-8 reduce drásticamente los problemas de incompatibilidad, pero no los elimina si la codificación no se declara o se interpreta incorrectamente.

Antes de la introducción de Unicode, se utilizaban otras codificaciones de caracteres. Por ejemplo, ISO-8859 contiene 15 codificaciones diferentes. Éstas son las mismas para los caracteres comúnmente utilizados en inglés. Tienen varios "bloques" de "caracteres especiales", que se archivan de forma diferente para cada codificación.



¿Por qué aparece el mojibake?

  • Interpretación con la codificación equivocada: los bytes que representan un texto fueron codificados con una tabla (por ejemplo UTF-8) pero al leerlos se usan otras (por ejemplo ISO‑8859‑1 o Windows‑1252). El resultado son símbolos distintos e ilegibles.
  • No declarar la codificación: si una página web, un correo o un fichero no indican su charset, el software puede adivinar mal la codificación.
  • Configuración inconsistente entre componentes: el editor, el servidor web, la base de datos y la aplicación deben usar la misma codificación. Si uno usa UTF‑8 y otro Windows‑1252, aparecen problemas.
  • Double encoding (doble codificación): el texto se codifica dos veces o se convierte incorrectamente varias veces, dejando bytes que luego se interpretan mal.
  • Marca de orden de bytes (BOM): algunos ficheros UTF‑8 incluyen un BOM y otros no; en algunos contextos el BOM puede generar símbolos extra o confundir detección automática.

Ejemplos comunes

Algunos casos frecuentes de mojibake cuando UTF‑8 se interpreta como ISO‑8859‑1/Windows‑1252:

  • La letra "é" (U+00E9) en UTF‑8 se codifica como los bytes 0xC3 0xA9; interpretados como ISO‑8859‑1 aparecen como "é".
  • La "ñ" aparece frecuentemente como "ñ".
  • Un guion largo (—, U+2014) con bytes UTF‑8 0xE2 0x80 0x94 puede aparecer como "—".

Cómo detectar y arreglar mojibake

  • Ver los bytes: abrir el fichero en un editor que muestre la codificación o inspeccionar el contenido en hexadecimal para ver qué bytes hay realmente.
  • Herramientas de detección: uchardet, chardet o utilidades del sistema (por ejemplo el comando file en Linux) pueden ayudar a identificar la codificación probable.
  • Conversiones con utilidades: usar iconv o recode para convertir ficheros entre encodings. Ejemplo:
    iconv -f WINDOWS-1252 -t UTF-8 input.txt > output.txt
  • Arreglar contenido doblemente codificado: a veces es necesario reinterpretar la cadena en la codificación errónea y luego decodificarla correctamente. En Python:
    fixed = garbled.encode('latin1').decode('utf-8')
    Este truco reinterpreta los caracteres garbled como bytes Latin‑1 para luego decodificarlos como UTF‑8.
  • Navegadores y editores: la mayoría permiten forzar la codificación de visualización (Ver → Codificación de caracteres) —útil para diagnosticar— y guardarla correctamente después.
  • Bases de datos: confirmar la codificación del almacenamiento y la conexión. En MySQL, por ejemplo, usar UTF‑8 (actualmente recomendado utf8mb4) y declarar la conexión con SET NAMES utf8mb4 o la API correspondiente (p. ej. mysqli_set_charset() en PHP).

Buenas prácticas para prevenir mojibake

  • Usar UTF‑8 de forma consistente: desde el editor, sistema de control de versiones, servidor web, base de datos y API hasta los ficheros estáticos.
  • Declarar el charset: en HTTP enviar la cabecera Content‑Type con el charset (por ejemplo Content-Type: text/html; charset=utf-8) y en HTML usar <meta charset="utf-8">.
  • Evitar BOM en UTF‑8 para web: muchos proyectos recomiendan no incluir el BOM en ficheros UTF‑8 destinados a la web, pues puede añadir bytes extra al inicio de la salida.
  • Configurar correctamente la base de datos y la conexión: la codificación interna y la conexión deben coincidir (ej. utf8mb4 y collations compatibles).
  • Pruebas y revisión: comprobar archivos importados/exportados, correos y servicios externos para detectar rápidamente discrepancias.

Resumen

Mojibake es el síntoma visible de un desajuste entre cómo se codificó el texto originalmente y cómo se está interpretando. Aunque Unicode (y en particular UTF‑8) ha reducido drásticamente estos problemas, es imprescindible declarar y mantener la misma codificación a lo largo de todas las capas de una aplicación (editores, ficheros, servidores, bases de datos y clientes) para evitarlos. Cuando ocurren, las herramientas de detección y conversión y la interpretación cuidadosa de los bytes permiten recuperar o corregir el texto.

Este es el aspecto que puede tener un sitio web si se utiliza una codificación de fuente incorrecta.Zoom
Este es el aspecto que puede tener un sitio web si se utiliza una codificación de fuente incorrecta.

El artículo de la Wikipedia en japonés sobre Mojibake utiliza la codificación UTF-8. Esta captura de pantalla muestra el aspecto que tiene cuando se descodifica utilizando la codificación estándar CP1252 de Windows.Zoom
El artículo de la Wikipedia en japonés sobre Mojibake utiliza la codificación UTF-8. Esta captura de pantalla muestra el aspecto que tiene cuando se descodifica utilizando la codificación estándar CP1252 de Windows.

Origen de la palabra

Mojibake es una palabra japonesa. La palabra 文字化け ([moʥibake]) se compone de dos partes. 文字 (moji) significa letra, carácter. 化け (bake), del verbo 化ける (bakeru), significa aparecer disfrazado, tomar la forma de, cambiar a peor. Literalmente, significa "mutación de carácter".



Preguntas y respuestas

P: ¿Qué es "mojibake"?


R: Mojibake es el término para los caracteres incorrectos e ilegibles que aparecen cuando el software del ordenador no consigue mostrar el texto correctamente.

P: ¿Cómo se codifica el texto cuando se utilizan ordenadores?


R: El texto se codifica utilizando una codificación de caracteres, en la que cada carácter se sustituye por su posición o número en la codificación.

P: ¿Qué ocurre cuando no se especifica la codificación original al transferir texto?


R: Cuando no se especifica la codificación original, es posible que se utilice un carácter diferente al sustituir el número por el carácter para mostrar.

P: ¿Qué es Unicode y cómo resuelve este problema?


R: Unicode es una norma de codificación de caracteres que puede representar la mayoría de los caracteres en dos bytes. Resuelve el problema de utilizar diferentes codificaciones de caracteres y garantiza que los caracteres se muestren correctamente.

P: ¿Cuáles son algunos ejemplos de otras codificaciones de caracteres que se utilizaban antes de Unicode?


R: ISO-8859 es un ejemplo de otra codificación de caracteres que se utilizaba antes de Unicode.

P: ¿Cuántas codificaciones diferentes contiene ISO-8859?


R: ISO-8859 contiene 15 codificaciones diferentes.

P: ¿Los caracteres especiales de ISO-8859 son los mismos para todas sus codificaciones?


R: No, los caracteres especiales de ISO-8859 se archivan de forma diferente para cada codificación.


Buscar dentro de la enciclopedia
AlegsaOnline.com - 2020 / 2025 - License CC3