Decodificar Base64 a texto legible (y por qué a veces salen caracteres raros)
2026-07-20
Tienes una cadena larga de letras y números, sabes que dentro hay texto, la pasas por un decodificador y lo que sale es algo así:
Información del usuario: José Muñoz
Debería poner «Información del usuario: José Muñoz». El contenido está bien; lo que falla es cómo se interpretan los bytes al final del proceso. Es el problema más común al decodificar Base64 en español y tiene una explicación concreta.
Por qué aparecen esos caracteres
Base64 no guarda texto, guarda bytes. Cuando decodificas, recuperas exactamente los bytes originales, pero entonces alguien tiene que decidir qué letras representan esos bytes. Ahí es donde se rompe.
En UTF-8, que es el estándar actual, la ó no ocupa un byte sino dos: C3 B3. Si el decodificador interpreta esos bytes uno a uno con una tabla antigua como Latin-1, muestra dos caracteres separados: à y ³. De ahí sale Información.
La regla rápida para reconocerlo: si ves Ã,  o †justo donde debería haber una tilde, una eñe o unas comillas, el problema es de codificación, no de la cadena Base64. Los datos están intactos; solo se están leyendo mal.
La solución es usar un decodificador que trate la salida como UTF-8. El de esta web lo hace por defecto, así que las tildes, la eñe y los signos de apertura ¿ ¡ salen correctamente sin configurar nada.
Cómo saber si una cadena es realmente Base64
Antes de pelearte con un texto, comprueba que sea Base64. Las señales:
- Solo contiene letras (A–Z, a–z), números,
+y/. Si aparecen espacios, acentos o símbolos como<, no lo es. - Su longitud es múltiplo de 4.
- Suele terminar en uno o dos signos
=.
Esos = finales son relleno, no un error ni parte del contenido. Base64 procesa los datos en grupos de tres bytes, y cuando el último grupo queda incompleto se completa con = para cuadrar la longitud. Verlos es normal.
Si una cadena falla al decodificar, lo primero que hay que mirar es precisamente si le faltan esos = finales, algo habitual cuando el texto se ha copiado desde un correo o un chat que recortó el final.
La variante que rompe la mitad de los intentos
Existe una versión llamada Base64 URL-safe que sustituye dos caracteres:
| Base64 estándar | URL-safe |
|---|---|
+ | - |
/ | _ |
El motivo es que + y / tienen significado propio dentro de una URL. Esta variante se usa muchísimo en tokens y parámetros web, y suele venir sin los = del final.
Si estás intentando decodificar algo que sacaste de una URL o de un token y no funciona, casi seguro es esto. Cambia los - por + y los _ por /, añade = hasta que la longitud sea múltiplo de 4, y decodifica de nuevo.
Decodificar un JWT
Un token JWT tiene esta forma: xxxxx.yyyyy.zzzzz, con dos puntos que lo dividen en tres partes.
La primera es la cabecera y la segunda es la carga útil, que es la interesante: contiene los datos del token, como el usuario o la fecha de expiración. Ambas están en Base64 URL-safe. Copia solo el bloque central, entre los dos puntos, y decodifícalo — verás un JSON legible.
La tercera parte es la firma y no es texto, así que decodificarla no sirve de nada. Está ahí para verificar que el token no ha sido alterado.
Una advertencia importante
Base64 no es cifrado. Solo cambia la forma de representar los datos, y cualquiera puede revertirlo en un segundo sin ninguna contraseña. Que algo esté «en Base64» no significa que esté protegido.
Esto importa en la práctica: si decodificas un JWT y ves datos personales, esos datos son legibles para cualquiera que tenga el token. Y por el mismo motivo, nunca guardes contraseñas ni claves «codificadas en Base64» pensando que están a salvo.
Hacerlo
Puedes decodificar tus cadenas en Base64 codificar/decodificar. Funciona en los dos sentidos y trata el resultado como UTF-8, así que el texto en español sale con sus tildes en su sitio.
Todo se ejecuta en tu navegador. Es relevante aquí más que en otras herramientas: si estás decodificando un token o un fragmento de configuración, esos datos no deberían pasar por el servidor de nadie. Puedes comprobarlo abriendo la pestaña de red del navegador mientras lo usas — no verás ninguna petición.