Subir un archivo
  1. base64hub
  2. Herramientas de texto
  3. Base64 a UTF-8

Base64 a UTF-8: decodifica Base64 a texto Unicode

Pega Base64 y léelo como texto UTF-8. Si los bytes no son UTF-8 válido, la herramienta marca los puntos dañados con � y te avisa, así que un juego de caracteres equivocado o una cadena cortada saltan a la vista.

Gratis sin registro, sin límites Local no se sube nada Actualizado 27 oct 2026
Entrada 0 BSalida 0 BTamaño –

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo decodificar Base64 a UTF-8

  1. Pega el Base64 en Entrada · Base64. Juego de caracteres viene ajustado a UTF-8.
  2. Lee el resultado en Salida · texto. La línea de estado muestra el número de bytes y el tipo de contenido detectado.
  3. Si la línea de estado dice “Algunos bytes no son UTF-8 válido”, el texto está en otro juego de caracteres. Prueba Detección automática, Windows-1252 o UTF-16LE.
  4. Copiar salida copia el texto; Descargar guarda los bytes decodificados sin cambios.

Para codificar en la otra dirección, usa UTF-8 a Base64.

Ejemplos

Base64Decodificado como UTF-8Qué muestra
8J+YgA==😀Un emoji, 4 bytes
4oKs€3 bytes, sin relleno
bmHDr3ZlIGNhZsOpnaïve caféLetras acentuadas, 2 bytes cada una
77u/SGk=Hi5 bytes: una marca de orden de bytes y luego Hi
Y2Fm6Q==caf�E9 es é en Latin-1, no válido en UTF-8
8J+Y�Un emoji cortado tras 3 de sus 4 bytes
Y2Fmw4PCqQ==caféUTF-8 válido de un texto que ya venía estropeado

Las tres últimas filas son los problemas que se tratan a continuación: un juego de caracteres equivocado, una cadena cortada y un texto que ya estaba estropeado antes de codificarse.

UTF-8 no válido y el carácter de sustitución

UTF-8 tiene reglas estrictas: un byte por encima de 7F debe formar parte de una secuencia de 2, 3 o 4 bytes con un patrón fijo. Los bytes que rompen el patrón no se pueden leer como UTF-8. El decodificador sustituye cada secuencia rota por U+FFFD (�) y añade el aviso «Algunos bytes no son UTF-8 válido. Prueba otro juego de caracteres.» No se descarta nada en silencio, así que cada � señala el lugar exacto del problema.

Dos causas explican casi todos los casos:

  • Otro juego de caracteres. Y2Fm6Q== contiene 63 61 66 E9, que es café en ISO-8859-1 y Windows-1252. Cambia Juego de caracteres y aparece el texto. La página del decodificador Base64 recoge los síntomas habituales de cada juego de caracteres.
  • Una cadena truncada. Si el Base64 se cortó, por ejemplo por el límite de una columna en una base de datos o en una línea de log, el último carácter puede perder parte de sus bytes. 8J+YgA== es un emoji completo; 8J+Y es el mismo emoji sin su último byte y se decodifica como un único �. Busca el valor completo en el origen.

Texto doblemente codificado (é y ’)

Cuando la salida muestra é en lugar de é, ü en lugar de ü o ’ en lugar de un apóstrofo tipográfico, el decodificador no tiene la culpa. En algún paso anterior, unos bytes UTF-8 se leyeron como Windows-1252 y se volvieron a guardar como UTF-8, y cada carácter especial se convirtió en dos o tres caracteres erróneos. El Base64 conserva fielmente ese texto dañado: Y2Fmw4PCqQ== es UTF-8 válido de la cadena de siete bytes café.

A menudo puedes reparar una cadena así desde código deshaciendo el error: codifica el texto como Windows-1252 y decodifica los bytes como UTF-8. La solución de verdad está en el sistema que lo escribió.

Marcas de orden de bytes

Algunos editores, sobre todo en Windows, empiezan los archivos UTF-8 con los bytes EF BB BF, una marca de orden de bytes. En Base64, el archivo empieza entonces por 77u/. El decodificador reconoce la marca y la deja fuera del texto, mientras que Descargar conserva los bytes tal cual. Desde código puede que tengas que quitarla tú:

import base64

raw = base64.b64decode("77u/SGk=")
raw.decode("utf-8")       # '\ufeffHi'
raw.decode("utf-8-sig")   # 'Hi'

base64.b64decode("Y2Fm6Q==").decode("utf-8", errors="replace")   # 'caf�'

Sin errors="replace", Python lanza UnicodeDecodeError ante bytes no válidos. En JavaScript, new TextDecoder("utf-8", { fatal: true }) lanza un TypeError en lugar de insertar �, y el decodificador por defecto elimina el BOM igual que esta herramienta. Más en Base64 en Python y Base64 en JavaScript.

Preguntas frecuentes

¿Cómo decodifico Base64 a una cadena UTF-8?

Decodifica el Base64 a bytes y luego interpreta esos bytes como UTF-8. Arriba, todo ocurre en un solo paso. En Python es base64.b64decode(s).decode("utf-8"); en un navegador, new TextDecoder().decode(bytes).

¿Qué significa el carácter � en la salida?

Es U+FFFD, el carácter de sustitución. El decodificador lo inserta allí donde los bytes no forman UTF-8 válido, lo que suele significar que el texto se codificó con otro juego de caracteres o que el Base64 está cortado.

¿Por qué mi texto decodificado empieza con un carácter invisible?

Seguramente el origen tenía una marca de orden de bytes UTF-8 (un Base64 que empieza por 77u/). Esta herramienta la elimina, pero el .decode("utf-8") normal de Python la conserva como \ufeff; usa "utf-8-sig" para quitarla.

¿Es UTF-8 la opción correcta para mi Base64?

Lo más probable es que sí. JSON, la web, Linux y las API modernas usan UTF-8. Los datos de programas antiguos de Windows o las cadenas de .NET y PowerShell pueden venir en Windows-125x o UTF-16.