Cómo codificar texto ASCII a Base64
- Escribe o pega el texto en Entrada · texto. El Juego de caracteres ya viene en ASCII.
- El Base64 aparece en Salida · Base64. Si el texto contiene caracteres que no son ASCII, un aviso bajo la herramienta indica cuántos se sustituyeron por
?. - Quita o cambia esos caracteres, o pasa el Juego de caracteres a UTF-8 si el receptor lo entiende.
- Copia el resultado o descárgalo como
base64.txt.
La operación inversa es Base64 a ASCII.
Qué se considera ASCII
ASCII define 128 códigos, del 0 al 127, de un byte cada uno con el bit superior a cero. Los códigos 32 a 126 son los caracteres imprimibles: el espacio, los dígitos, las letras inglesas y la puntuación habitual. Los códigos 0 a 31 y el 127 son caracteres de control, como la tabulación (9), el salto de línea (10) y el retorno de carro (13).
Todo lo demás, incluidos é, ß, €, las comillas tipográficas, los espacios de no separación y los emojis, no es ASCII. El texto copiado de procesadores de texto y páginas web suele traerlos sin que se note, sobre todo en forma de comillas y guiones tipográficos, y el aviso de sustitución los detecta.
Ejemplos
| Texto | Base64 | Nota |
|---|---|---|
Hello, ASCII! | SGVsbG8sIEFTQ0lJIQ== | Igual que en UTF-8 |
200 OK | MjAwIE9L | 6 bytes, sin relleno |
{}[]<> | e31bXTw+ | La puntuación son bytes normales |
a, tabulación, b | YQli | La tabulación es el byte 09 |
line1 CR LF line2 | bGluZTENCmxpbmUy | 0D 0A en medio |
user:pass | dXNlcjpwYXNz | Credenciales de HTTP Basic auth |
Grüße | R3I/P2U= | 2 caracteres sustituidos por ? |
naïve café | bmE/dmUgY2FmPw== | 2 caracteres sustituidos por ? |
Como cada carácter se codifica en un byte, el tamaño es fácil de prever: n caracteres dan 4 × ⌈n / 3⌉ caracteres Base64.
Por qué ASCII y Base64 van de la mano
Base64 se diseñó para canales que solo transportaban con seguridad ASCII de 7 bits. El correo electrónico de los inicios (SMTP) es el ejemplo clásico: los bytes por encima de 127 podían eliminarse o alterarse por el camino, así que los adjuntos binarios y el texto que no estaba en inglés se codificaban en un subconjunto de ASCII que cualquier sistema manejaba. Esa sigue siendo la razón de ser de Base64, y explica su alfabeto: 64 caracteres imprimibles, idénticos en todos los juegos de caracteres derivados de ASCII y, salvo + y /, sin significado especial en los formatos habituales. Cómo funciona Base64 explica el mecanismo.
Algunos sistemas todavía esperan solo ASCII, por ejemplo interfaces heredadas y los valores de cabeceras HTTP, donde el tratamiento de lo que no es ASCII varía entre servidores. Codificar aquí con el juego de caracteres ASCII confirma que la entrada es segura para ellos antes de enviarla a ningún sitio. Para la cabecera Authorization en concreto, el generador de cabeceras Basic Auth crea el valor completo Basic dXNlcjpwYXNz.
ASCII a Base64 en código
Python rechaza por defecto los caracteres que no son ASCII, lo cual es una comprobación útil:
import base64
base64.b64encode("200 OK".encode("ascii")).decode() # 'MjAwIE9L'
"Grüße".encode("ascii")
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3
"Grüße".encode("ascii", errors="replace") # b'Gr??e', like this tool
En JavaScript, btoa() acepta cualquier carácter hasta el código 255, así que no detecta letras Latin-1 como ü. Comprueba antes la cadena con /^[\x00-\x7F]*$/.test(s) si tiene que ser ASCII puro. Más en las páginas de Python y JavaScript.
Preguntas frecuentes
¿ASCII a Base64 es distinto de UTF-8 a Base64?
No para texto ASCII puro. UTF-8 se diseñó para que los primeros 128 caracteres conserven sus valores de byte ASCII, así que Hello, ASCII! da SGVsbG8sIEFTQ0lJIQ== en ambos. Solo difieren cuando el texto contiene otros caracteres.
¿Qué pasa con caracteres como ü o los emojis?
ASCII no tiene código para ellos, así que cada uno se convierte en ? (byte 3F) y la herramienta indica cuántos se sustituyeron. Grüße se codifica como R3I/P2U=, que se decodifica como Gr??e.
¿La salida Base64 es ASCII?
Sí. Los 65 caracteres que usa Base64 (A–Z, a–z, 0–9, +, / y =) son ASCII imprimible, por eso Base64 atraviesa sistemas que solo manejan texto de 7 bits.
¿Se pueden codificar caracteres de control como tabulaciones y saltos de línea?
Sí. También son ASCII (códigos 0–31) y se codifican como cualquier otro byte: a, tabulación, b da YQli.