¿Qué archivo es un Base64 que empieza por JVBERi0?
JVBERi0 = PDF Un PDF. Todo PDF empieza con los bytes `%PDF-`, que en Base64 quedan como `JVBERi0`. `iVBORw0KGgo` es un PNG, `/9j/` es un JPEG y `UEsDB` es un ZIP, lo que incluye DOCX y XLSX.
Base64 a PDF online: pega Base64 puro, una data URI o la respuesta JSON completa. Detecta el tipo real del archivo, lo previsualiza y descarga, y avisa si el PDF está truncado. También PDF a Base64. No se sube nada.
Interpretado así:
Suelta aquí un PDF o cualquier otro archivo, o haz clic para buscarlo
Cualquier tipo de archivo · hasta 50 MB · nunca se sube
Cada tipo de archivo empieza con unos bytes "mágicos" fijos, así que su Base64 empieza con unos caracteres fijos. Los prefijos de abajo se calculan a partir de cabeceras de archivo reales con el mismo motor que usa esta herramienta.
| El Base64 empieza por | Tipo de archivo | Bytes mágicos (hex) |
|---|---|---|
JVBERi0 | 25 50 44 46 2D | |
iVBORw0KGgoAAAANSUhEU | PNG | 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 |
/9j/ | JPEG | FF D8 FF |
R0lGOD | GIF | 47 49 46 38 |
UEsDB | ZIP / DOCX / XLSX / PPTX | 50 4B 03 04 |
0M8R4KGxGu | Office 97–2003 (DOC/XLS/PPT) | D0 CF 11 E0 A1 B1 1A E1 |
H4sI | Gzip | 1F 8B 08 |
UklGR | RIFF (WebP / WAV / AVI) | 52 49 46 46 |
SUQz | MP3 (ID3) | 49 44 33 |
e1xydG | RTF | 7B 5C 72 74 66 |
Escrito y revisado por los ingenieros que desarrollan las herramientas de codificación de Go Tools. Cada longitud, prefijo y ejemplo de esta página lo genera el propio motor de la página y lo comprueban pruebas automatizadas.
JVBERi0 = PDF Un PDF. Todo PDF empieza con los bytes `%PDF-`, que en Base64 quedan como `JVBERi0`. `iVBORw0KGgo` es un PNG, `/9j/` es un JPEG y `UEsDB` es un ZIP, lo que incluye DOCX y XLSX.
+33.3% 4 caracteres por cada 3 bytes, es decir, un 33.3% más: un PDF de 1 MB (1.048.576 bytes) se convierte en 1.398.104 caracteres. Con un salto de línea cada 76 caracteres, como en los adjuntos de correo, son 1.434.896 caracteres, un 36.8% más.
Base64 representa bytes arbitrarios usando solo 64 caracteres de texto seguros (A–Z, a–z, 0–9, +, /), con = como relleno (padding). Cada 3 bytes se convierten en 4 caracteres. Así, un archivo binario como un PDF puede viajar por canales que solo admiten texto: un campo JSON, un elemento XML, el cuerpo de un correo, una columna de texto en una base de datos. Convertir Base64 a PDF es simplemente deshacerlo: volver a pasar los caracteres a bytes y guardarlos con extensión .pdf. El problema es que el Base64 real casi nunca llega limpio: trae un prefijo data:, escapes JSON, saltos de línea o un alfabeto distinto, y muchos conversores generan sin avisar un archivo que no se abre.
%PDF-1.4 → bytes 25 50 44 46 2D 31 2E 34 JVBERi0xLjQ= → the same bytes in Base64 data:application/pdf;base64,JVBERi0xLjQ= → data URI form
Procesa data URIs, escapes JSON \/ y \n, comillas, saltos de línea MIME, - _ URL-safe, %2B %2F copiados de URLs, cabeceras PEM y padding = que falta, y muestra cada paso aplicado.
Pega {"code":0,"data":{"file":"JVBERi0…"}} tal cual. Se usa el campo más largo con aspecto de Base64 y se muestra su ruta (data.file), para que sepas qué campo se decodificó.
PDF, PNG, JPEG, GIF, WebP, DOCX, XLSX, PPTX, ZIP, GZIP, MP3, MP4 y más de 40 formatos más se reconocen por sus primeros bytes. La descarga lleva la extensión correcta aunque el prefijo diga otra cosa.
Detecta un PDF sin %%EOF (cortado al copiar o por el límite de longitud de una columna), Base64 codificado dos veces, hexadecimal pegado como Base64, datos comprimidos con gzip y PDF cifrados.
Los PDF se abren en el visor integrado del navegador, las imágenes y los SVG se muestran, el texto y el JSON aparecen como texto. El HTML nunca se renderiza, solo se ve su código fuente, porque se ejecutaría en esta página.
Suelta un archivo de hasta 50 MB y obtén Base64 puro o una data URI, opcionalmente URL-safe o con saltos cada 76 caracteres, con el aumento de tamaño exacto.
base64.b64decode open('out.pdf', 'wb').write(base64.b64decode(s)). Usa urlsafe_b64decode para - y _; b64decode ignora los saltos de línea salvo que pases validate=True.
java.util.Base64 Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s)). getDecoder() rechaza los saltos de línea; getUrlDecoder() es para - y _.
Buffer fs.writeFileSync('out.pdf', Buffer.from(s, 'base64')). Buffer acepta ambos alfabetos e ignora los espacios, pero también se salta sin avisar cualquier otro carácter no válido en lugar de lanzar un error, así que comprueba que el resultado empiece por %PDF-.
atob / Uint8Array.fromBase64 Construye un Uint8Array antes de crear el Blob. Uint8Array.fromBase64() es la función nativa más reciente; comprueba la compatibilidad en tus navegadores objetivo.
base64_decode file_put_contents('out.pdf', base64_decode($s, true)). Pasa true para el modo estricto; si no, los caracteres no válidos se descartan sin avisar.
Convert.FromBase64String File.WriteAllBytes("out.pdf", Convert.FromBase64String(s)). Admite espacios en blanco; - y _, no.
base64 -d / certutil macOS y Linux: base64 -d < in.txt > out.pdf. Windows: certutil -decode in.txt out.pdf.
JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · versión 1.4 · descargado como file.pdf
Empieza por JVBERi0, que es %PDF-. No hay nada que limpiar, así que se decodifica tal cual.
"data:application\/pdf;base64,JVBERi0xLjQK…"
Interpretado así: comillas eliminadas → escapes JSON deshechos → prefijo data URI eliminado (application/pdf)
El json_encode de PHP y algunos serializadores de Java escriben / como \/. Si lo pegas en un decodificador que no lo deshace, la barra invertida es un carácter no válido.
{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}} Interpretado así: campo data.file extraído del JSON
No hace falta recortar la cadena a mano. Se usa el campo más largo con aspecto de Base64 y se muestra su ruta.
data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
Aviso: la data URI dice application/pdf, pero los bytes son PNG. Guardado como file.png
Muchos conversores escribirían un .pdf que ningún lector puede abrir. Los bytes mágicos mandan sobre la etiqueta.
255044462d312e370a…
Aviso: parece hexadecimal; leído como hex es un PDF. [Decodificar como hex]
Todos los dígitos hexadecimales son caracteres Base64 válidos, así que la decodificación Base64 no falla: produce basura sin avisar. 25 50 44 46 es %PDF.
Base64 puro, data:application/pdf;base64,…, una cadena copiada de un JSON con escapes \/ o la respuesta completa de la API. Para cadenas muy largas usa Abrir un archivo .txt en lugar de pegar.
La línea bajo el cuadro enumera cada paso de limpieza: prefijo eliminado, escapes deshechos, padding añadido, campo extraído del JSON. Si algo falla, el error indica el carácter exacto y su posición.
La etiqueta muestra el tipo leído de los bytes mágicos del archivo. Aparece una nota amarilla si en realidad no es un PDF, si la data URI miente sobre el tipo o si el PDF está cortado antes de %%EOF.
Los PDF se abren en el visor del propio navegador; las imágenes y el texto se muestran en la página. Cambia el nombre del archivo si quieres y haz clic en Descargar. Para el sentido inverso, cambia a PDF / archivo → Base64 y suelta un archivo.
data:application/pdf;base64, no forma parte del Base64. Si lo dejas, o bien lanza un error (: y ; no son válidos) o, en decodificadores permisivos, corrompe los primeros bytes y el archivo deja de empezar por %PDF-.
base64.b64decode(value) # value = 'data:application/pdf;base64,JVBERi0…'
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64) Un PDF es binario. Convertir los bytes decodificados en una cadena y escribirla con una codificación de texto sustituye los bytes no válidos y cambia los finales de línea, lo que rompe la tabla de referencias cruzadas.
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString()) fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64')) Base64.getDecoder() de Java rechaza los saltos de línea. El Base64 de un correo o del comando base64 en Linux viene partido cada 76 caracteres. Usa el decodificador MIME o elimina antes los espacios.
byte[] pdf = Base64.getDecoder().decode(wrapped); // IllegalArgumentException
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);
Los JWT y muchos parámetros de URL usan - y _ en lugar de + y /, y omiten el padding =. Un decodificador estándar los rechaza o decodifica bytes incorrectos.
base64.b64decode(token_part) # contains - and _
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))
En el navegador, atob devuelve una cadena binaria, un carácter por byte. Pasarla a new Blob([str]) la codifica en UTF-8 y convierte cada byte por encima de 127 en dos bytes. Cópiala antes a un Uint8Array.
new Blob([atob(b64)], { type: 'application/pdf' }) const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' }) Un PDF termina en %%EOF. Si el Base64 se cortó por una columna VARCHAR, un límite de longitud de línea de log o una copia incompleta, el archivo se decodifica pero los lectores muestran un error o faltan páginas. Compara la longitud con la que generó el emisor.
SELECT LENGTH(pdf_b64) FROM docs; -- 65535: suspiciously round
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT; -- or store the bytes in a BLOB
{"filename": …, "content": "<base64>"}. Codifica aquí el archivo para montar una petición de prueba en Postman o cURL.%%EOF sabrás que la columna o la línea de log era demasiado corta.+ / (estándar, sección 4) y - _ (seguro para URL y nombres de archivo, sección 5). El Base64 URL-safe suele omitir el padding =. Si una cadena mezcla los dos, se editó o se unió de dos fuentes.= hace que la longitud sea múltiplo de 4. Sin él, un resto de 2 o 3 se puede restaurar; un resto de 1 es imposible en cualquier Base64 válido: se perdió o se añadió un carácter. Un = en medio suele indicar que se concatenaron dos cadenas.%PDF- en un PDF, 89 50 4E 47 en un PNG, 50 4B 03 04 en los formatos basados en ZIP como DOCX y XLSX. Esos bytes fijan los primeros caracteres del Base64, así que el tipo se puede leer antes de decodificar: consulta la tabla en la herramienta.%%EOF. Si no aparece en los últimos 1.024 bytes, el archivo casi seguro se cortó. La cabecera puede empezar hasta 1.024 bytes más adelante; la mayoría de los lectores abren esos archivos igualmente, así que se avisa pero no se rechaza.{"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}) o usa una data URI, para que el receptor no tenga que adivinar.%PDF-. Con una línea de código detectas campos equivocados, doble codificación y páginas de error devueltas en Base64.multipart/form-data o una URL de descarga prefirmada es más ligero para ambos extremos.BLOB/bytea ocupa un tercio menos y no se puede truncar sin avisar como un VARCHAR. Codifica en Base64 solo en la frontera de la API.data:application/pdf;base64,, las comillas, los saltos de línea y los escapes JSON pueden quedarse: se eliminan automáticamente. data: se decodificó como parte de los datos; los bytes se escribieron como texto en vez de binario; la cadena se cortó (no hay %%EOF al final); el Base64 se codificó dos veces; o directamente no es un PDF, por ejemplo un PNG o un mensaje de error JSON. Pega aquí la misma cadena: cada uno de estos casos muestra un aviso concreto. JVBERi0 es PDF, iVBORw0KGgo es PNG, /9j/ es JPEG, R0lGOD es GIF, UEsDB es ZIP (y por tanto DOCX, XLSX, PPTX), H4sI es gzip. La herramienta lee los bytes mágicos decodificados, muestra el tipo y guarda el archivo con la extensión que corresponde. data:application/pdf;base64,JVBERi0…. Los navegadores pueden abrirla directamente como enlace o como src. Las API normalmente solo quieren la parte Base64 que va después de la coma. %PDF-. El tipo que se muestra es lo que los bytes son en realidad. Las sorpresas habituales son un escaneo en PNG o JPEG, un DOCX, un ZIP con varios PDF, o un mensaje de error JSON o HTML codificado en Base64 en lugar del documento. %%EOF. Si falta, el Base64 casi seguro se truncó: se copió solo en parte, lo cortó una columna de base de datos como un TEXT de MySQL (65.535 bytes) o lo acortó un límite de longitud de línea de log. Vuelve a obtener la cadena completa; la decodificación no puede recuperar datos que faltan. Codificación y Formato
La tabla ASCII completa: 128 caracteres en decimal, hexadecimal, octal y binario, más un convertidor texto ↔ ASCII. Cada carácter de control trae su secuencia de escape, su notación caret y dónde te lo encuentras.
Codificación y Formato
Genera EAN-13, UPC-A, Code 128, Code 39 y 11 tipos más de código de barras en SVG o PNG listo para imprimir. Escribe 12 dígitos y el dígito de control se completa solo; si te equivocas, te decimos cuál debería ser.
Codificación y Formato
Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.
Codificación y Formato
Decodifica una cadena Base64 o data URI de vuelta a una imagen en tu navegador. Previsualiza, lee dimensiones y MIME, luego descarga como PNG, JPG, GIF, SVG. Sin subir.
Codificación y Formato
Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.
Codificación y Formato
Pega el texto ilegible y recupera el original. Se prueban y ordenan todas las cadenas de codificación plausibles — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — y se muestra la cadena exacta. Gratis y todo en tu navegador.