Cómo codificar texto UTF-8 a Base64
- Escribe o pega tu texto en Entrada · texto. Juego de caracteres ya está en UTF-8.
- El Base64 aparece en Salida · Base64. La cifra Entrada bajo la herramienta es el número de bytes UTF-8; el contador sobre el cuadro cuenta los caracteres como lo hace JavaScript, así que un emoji cuenta como 2.
- Marca URL-safe (- _) y Sin relleno (=) para URL y tokens, o elige un Ajuste de línea para email o PEM.
- Copia la salida o descárgala como
base64.txt.
Base64 a UTF-8 convierte el resultado de nuevo en texto.
Cómo convierte UTF-8 los caracteres en bytes
UTF-8 usa de 1 a 4 bytes por punto de código. ASCII se queda en 1 byte, y por eso el texto en inglés se codifica igual en UTF-8 y en ASCII. Todo lo demás ocupa más:
| Carácter | Punto de código | Bytes UTF-8 | Base64 |
|---|---|---|---|
A | U+0041 | 41 | QQ== |
é | U+00E9 | C3 A9 | w6k= |
€ | U+20AC | E2 82 AC | 4oKs |
日本語 | U+65E5 U+672C U+8A9E | 9 bytes, 3 cada uno | 5pel5pys6Kqe |
😀 | U+1F600 | F0 9F 98 80 | 8J+YgA== |
Como Base64 añade un tercio sobre los bytes, una frase en chino o japonés crece aproximadamente al cuádruple al pasar de caracteres a caracteres Base64, y un emoji solo se convierte en 8 caracteres. Tenlo en cuenta en los campos con límite de longitud; la calculadora de tamaño ayuda.
Secuencias de emoji y tonos de piel
Lo que parece un solo emoji suele ser varios puntos de código pegados. Un tono de piel es un modificador aparte, y los emoji de familias o profesiones unen a varias personas con un carácter de unión de ancho cero invisible (U+200D):
| Emoji | Puntos de código | Bytes UTF-8 | Base64 |
|---|---|---|---|
| 😀 | 1 | 4 | 8J+YgA== |
| 👍🏽 | 2 (pulgar arriba + tono de piel medio) | 8 | 8J+RjfCfj70= |
| 👨👩👧 | 5 (tres personas + dos uniones) | 18 | 8J+RqOKAjfCfkanigI3wn5Gn |
Si cortas una cadena Base64 o sus bytes decodificados en mitad de una secuencia así, quedan caracteres rotos, así que nunca trunques UTF-8 codificado en un byte cualquiera.
Mismo texto, bytes distintos: normalización Unicode
Algunos caracteres tienen dos grafías válidas en Unicode. é puede ser el punto de código único U+00E9 (compuesto, NFC) o e seguida de U+0301 COMBINING ACUTE ACCENT (descompuesto, NFD). Los dos se ven igual, pero los bytes son distintos:
| Texto | Forma | Bytes | Base64 |
|---|---|---|---|
é | NFC | C3 A9 | w6k= |
é | NFD | 65 CC 81 | ZcyB |
naïve | NFC | 6 | bmHDr3Zl |
naïve | NFD | 7 | bmFpzIh2ZQ== |
Los nombres de archivo del antiguo sistema de archivos HFS+ de Apple se guardan descompuestos, mientras que la mayoría de los teclados producen texto compuesto. Si comparas valores Base64, los firmas o los usas como claves, normaliza primero. Esta herramienta codifica exactamente los puntos de código que pegas y no normaliza.
UTF-8 a Base64 en código
En JavaScript, TextEncoder siempre produce UTF-8. Normaliza primero cuando la entrada pueda venir de fuentes distintas:
const text = "e\u0301".normalize("NFC");
Buffer.from(text, "utf8").toString("base64"); // "w6k=" (Node.js)
new TextEncoder().encode(text); // Uint8Array [195, 169]
En los navegadores, los bytes de TextEncoder pueden ir a bytes.toBase64() donde esté disponible (Uint8Array.toBase64), o pasar por el helper de btoa de la página de JavaScript.
import base64, unicodedata
s = unicodedata.normalize("NFC", "nai\u0308ve")
base64.b64encode(s.encode("utf-8")).decode() # 'bmHDr3Zl'
Consulta Base64 en Python para archivos y streaming.
Preguntas frecuentes
¿El Base64 de UTF-8 es lo mismo que el Base64 normal?
Sí. Base64 siempre codifica bytes; «UTF-8 a Base64» solo indica qué bytes. Para texto ASCII simple, los bytes UTF-8 son iguales que los ASCII, así que la salida es idéntica en ambos casos.
¿Por qué dos cadenas que parecen idénticas dan Base64 distintos?
Unicode puede escribir algunos caracteres de más de una forma. é como un solo punto de código es w6k=, mientras que e más un acento combinable es ZcyB. Normaliza a NFC antes de codificar si los valores tienen que coincidir.
¿El codificador añade una marca de orden de bytes UTF-8?
No. La salida empieza directamente con los bytes de tu texto. Si un consumidor exige una BOM, el Base64 tiene que empezar por 77u/, que es la codificación de los bytes EF BB BF.
¿Cuántos bytes ocupa un emoji?
Un emoji de un solo punto de código ocupa 4 bytes en UTF-8. Los emoji con tono de piel o las familias unidas son varios puntos de código: 👍🏽 son 8 bytes y la familia 👨👩👧, 18.