Comment encoder du texte UTF-8 en Base64
- Saisissez ou collez votre texte dans Entrée · texte. Jeu de caractères est déjà réglé sur UTF-8.
- Le Base64 s’affiche dans Sortie · Base64. Le chiffre Entrée sous l’outil est le nombre d’octets UTF-8 ; le compteur au-dessus de la zone compte les caractères comme JavaScript, un emoji compte donc pour 2.
- Cochez URL-safe (- _) et Sans remplissage (=) pour les URL et les jetons, ou choisissez un Retour à la ligne pour l’e-mail ou le PEM.
- Copiez la sortie ou téléchargez-la dans
base64.txt.
Base64 en UTF-8 retransforme le résultat en texte.
Comment UTF-8 transforme les caractères en octets
UTF-8 utilise de 1 à 4 octets par point de code. L’ASCII reste sur 1 octet, ce qui explique qu’un texte anglais s’encode de la même façon en UTF-8 et en ASCII. Tout le reste en prend davantage :
| Caractère | Point de code | Octets 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 octets, 3 chacun | 5pel5pys6Kqe |
😀 | U+1F600 | F0 9F 98 80 | 8J+YgA== |
Comme Base64 ajoute un tiers aux octets, une phrase chinoise ou japonaise est multipliée par quatre environ entre ses caractères et ses caractères Base64, et un emoji seul devient 8 caractères. Gardez-le en tête pour les champs à longueur limitée ; le calculateur de taille vous aide.
Séquences d’emoji et couleurs de peau
Ce qui ressemble à un seul emoji est souvent l’assemblage de plusieurs points de code. Une couleur de peau est un modificateur séparé, et les emoji de familles ou de métiers relient plusieurs personnes avec un caractère invisible, le zero-width joiner (U+200D) :
| Emoji | Points de code | Octets UTF-8 | Base64 |
|---|---|---|---|
| 😀 | 1 | 4 | 8J+YgA== |
| 👍🏽 | 2 (pouce levé + peau intermédiaire) | 8 | 8J+RjfCfj70= |
| 👨👩👧 | 5 (trois personnes + deux jointures) | 18 | 8J+RqOKAjfCfkanigI3wn5Gn |
Couper une chaîne Base64 ou ses octets décodés au milieu d’une telle séquence laisse des caractères cassés : ne tronquez donc jamais de l’UTF-8 encodé sur un octet arbitraire.
Même texte, octets différents : la normalisation Unicode
Certains caractères ont deux écritures valides en Unicode. é peut être le point de code unique U+00E9 (composé, NFC) ou e suivi de U+0301 COMBINING ACUTE ACCENT (décomposé, NFD). Les deux s’affichent à l’identique, mais les octets diffèrent :
| Texte | Forme | Octets | Base64 |
|---|---|---|---|
é | NFC | C3 A9 | w6k= |
é | NFD | 65 CC 81 | ZcyB |
naïve | NFC | 6 | bmHDr3Zl |
naïve | NFD | 7 | bmFpzIh2ZQ== |
Les noms de fichiers sur l’ancien système de fichiers HFS+ d’Apple sont stockés sous forme décomposée, alors que la plupart des claviers produisent du texte composé. Si vous comparez des valeurs Base64, les signez ou les utilisez comme clés, normalisez d’abord. Cet outil encode exactement les points de code collés et ne normalise rien.
UTF-8 en Base64 dans le code
En JavaScript, TextEncoder produit toujours de l’UTF-8. Normalisez d’abord si l’entrée peut provenir de sources différentes :
const text = "e\u0301".normalize("NFC");
Buffer.from(text, "utf8").toString("base64"); // "w6k=" (Node.js)
new TextEncoder().encode(text); // Uint8Array [195, 169]
Dans les navigateurs, les octets de TextEncoder peuvent passer par bytes.toBase64() là où il est pris en charge (Uint8Array.toBase64), ou par l’utilitaire btoa de la page JavaScript.
import base64, unicodedata
s = unicodedata.normalize("NFC", "nai\u0308ve")
base64.b64encode(s.encode("utf-8")).decode() # 'bmHDr3Zl'
Voir Base64 en Python pour les fichiers et le streaming.
FAQ
Le Base64 de l'UTF-8 est-il le même que le Base64 normal ?
Oui. Base64 encode toujours des octets ; « UTF-8 en Base64 » précise simplement lesquels. Pour du texte ASCII simple, les octets UTF-8 sont égaux aux octets ASCII : la sortie est donc identique dans les deux cas.
Pourquoi deux chaînes d'apparence identique donnent-elles un Base64 différent ?
Unicode peut écrire certains caractères de plusieurs façons. é sous forme d’un seul point de code donne w6k=, alors que e suivi d’un accent combinant donne ZcyB. Normalisez en NFC avant d’encoder si les valeurs doivent correspondre.
L'encodeur ajoute-t-il une marque d'ordre des octets UTF-8 ?
Non. La sortie commence directement par les octets de votre texte. Si un destinataire exige un BOM, le Base64 doit commencer par 77u/, l’encodage des octets EF BB BF.
Combien d'octets occupe un emoji ?
Un emoji d’un seul point de code occupe 4 octets en UTF-8. Les emoji avec couleur de peau ou les familles assemblées comptent plusieurs points de code : 👍🏽 fait 8 octets et la famille 👨👩👧 en fait 18.