Calculer avec des groupes de trois octets et le remplissage

Le Base64 standard de la RFC 4648 représente trois octets par quatre caractères. Un dernier groupe de un octet demande == ; deux octets, = ; trois octets, aucun remplissage. Avec remplissage et sans sauts ajoutés, la longueur est 4 * Math.ceil(n / 3), où n compte les octets d’entrée. Zéro octet donne zéro.

n = new TextEncoder().encode(input).length
length = 4 * Math.ceil(n / 3)

f     1   Zg==       4
fo    2   Zm8=       4
foo   3   Zm9v       4
foob  4   Zm9vYg==   8

Ces exemples fixes ont été exécutés avec la fonction réelle. f, fo et foo produisent quatre caractères malgré des longueurs différentes ; leur remplissage diffère. foob contient quatre octets et produit huit caractères. Le remplissage indique le format du groupe final, pas des caractères ajoutés au texte original.

Entrées de 1, 2, 3 et 4 octets comparées aux sorties Base64 de 4, 4, 4 et 8 caractères, avec ==, =, aucun remplissage et ==.
Schéma original calculé à partir des exemples. Les nombres à gauche comptent les octets d’entrée ; les chaînes sont les sorties réelles. Ce n’est pas une mesure du transfert total. Les nombres à droite comptent les caractères de sortie.

RFC 4648: Base 64 Encoding

Distinguer caractères, octets et sauts de ligne

Moyoutil utilise TextEncoder pour convertir le texte en octets UTF-8. L’exemple 가 occupe trois octets et devient 6rCA, quatre caractères. f suivi d’un saut LF occupe deux octets et devient Zgo=. Les espaces et sauts de l’original font partie des données à l’encodage. Les en-têtes HTTP, enveloppes JSON et préfixes d’URL de données sont hors de la formule.

base64("가")     // 6rCA
base64("f\n")  // Zgo=

WHATWG Encoding: TextEncoder

Saisissez le texte original et choisissez Encoder. Pour décoder, saisissez seulement la sortie Base64 standard. Le décodage retire les espaces blancs de son entrée ; l’encodage conserve ceux de l’original. Base64URL avec - et _ et la restauration de fichiers binaires arbitraires ne sont pas pris en charge. /w== est lisible en Base64, mais provoque une erreur car les octets ne sont pas du texte UTF-8. Modifier l’entrée efface l’ancien résultat et désactive la copie ; convertissez à nouveau.

Questions fréquemment posées

Base64 augmente-t-il toujours la taille d’environ 33% ?

Pour de grandes entrées, le rapport approche 4/3, mais le remplissage pèse davantage sur les petites. Un octet devient quatre caractères. Comptez les octets et vérifiez le remplissage pour calculer la longueur exacte.

L’interface convertit-elle une entrée vide en zéro caractère ?

La formule donne zéro pour zéro octet, mais l’interface Moyoutil demande du contenu si l’entrée est vide. La limite mathématique et la politique de saisie diffèrent.