Décoder du Base64 en texte lisible (et pourquoi les accents deviennent illisibles)
2026-07-20
Vous avez une longue chaîne de lettres et de chiffres, vous savez qu'elle contient du texte, vous la passez dans un décodeur et vous obtenez ceci :
Données de l'utilisateur : François Benoît
Cela devrait donner « Données de l'utilisateur : François Benoît ». Le contenu est intact ; ce qui échoue, c'est la façon dont les octets sont interprétés à la fin. C'est le problème le plus fréquent quand on décode du Base64 en français, et il a une explication précise.
D'où viennent ces caractères
Le Base64 ne stocke pas du texte, il stocke des octets. En décodant, vous récupérez exactement les octets d'origine — mais il faut ensuite décider quelles lettres ces octets représentent. C'est là que ça casse.
En UTF-8, la norme actuelle, le é n'occupe pas un octet mais deux : C3 A9. Si le décodeur interprète ces octets un par un avec une ancienne table comme le Latin-1, il affiche deux caractères distincts : à et ©. D'où Données.
La règle pour le reconnaître : si vous voyez Ã,  ou †exactement là où devrait se trouver un accent, une cédille ou des guillemets, le problème est un problème d'encodage, pas de Base64. Les données sont intactes, elles sont simplement mal lues.
La solution consiste à utiliser un décodeur qui traite la sortie comme de l'UTF-8. Celui de ce site le fait par défaut : les accents, la cédille et les caractères comme œ ressortent correctement sans rien configurer.
Reconnaître une vraie chaîne Base64
Avant de vous acharner sur un texte, vérifiez que c'en est bien une. Les indices :
- Elle ne contient que des lettres (A–Z, a–z), des chiffres,
+et/. Si vous y voyez des espaces, des accents ou des symboles comme<, ce n'en est pas. - Sa longueur est un multiple de 4.
- Elle se termine souvent par un ou deux signes
=.
Ces = finaux sont du remplissage, ni une erreur ni une partie du contenu. Le Base64 traite les données par groupes de trois octets ; quand le dernier groupe est incomplet, il est complété par des = pour que la longueur tombe juste. Leur présence est normale.
Si une chaîne refuse de se décoder, commencez justement par regarder s'il ne manque pas ces = finaux — un cas fréquent quand le texte a été copié depuis un mail ou une messagerie qui a tronqué la fin.
La variante qui fait échouer un essai sur deux
Il existe une version dite Base64 URL-safe qui remplace deux caractères :
| Base64 standard | URL-safe |
|---|---|
+ | - |
/ | _ |
La raison est que + et / ont déjà un sens dans une URL. Cette variante est très répandue dans les jetons et les paramètres web, et elle arrive généralement sans les = de fin.
Si vous essayez de décoder quelque chose récupéré dans une URL ou un jeton et que ça ne fonctionne pas, c'est presque certainement ça. Remplacez les - par des + et les _ par des /, ajoutez des = jusqu'à obtenir un multiple de 4, puis décodez à nouveau.
Décoder un JWT
Un jeton JWT se présente ainsi : xxxxx.yyyyy.zzzzz, avec deux points qui le découpent en trois parties.
La première est l'en-tête, la deuxième est la charge utile — celle qui vous intéresse : elle contient les données du jeton, par exemple l'utilisateur ou la date d'expiration. Les deux sont en Base64 URL-safe. Copiez uniquement le bloc du milieu, entre les deux points, et décodez-le : vous obtiendrez du JSON lisible.
La troisième partie est la signature. Ce n'est pas du texte, la décoder ne donne rien d'exploitable. Elle sert à vérifier que le jeton n'a pas été modifié.
Un avertissement qui compte
Le Base64 n'est pas du chiffrement. Il ne fait que changer la représentation des données, et n'importe qui peut faire l'opération inverse en une seconde, sans aucun mot de passe. Qu'une donnée soit « en Base64 » ne signifie absolument pas qu'elle est protégée.
Cela a des conséquences concrètes : si vous décodez un JWT et y trouvez des données personnelles, ces données sont lisibles par quiconque possède le jeton. Et pour la même raison, ne stockez jamais un mot de passe ou une clé « encodés en Base64 » en pensant qu'ils sont à l'abri.
En pratique
Vous pouvez décoder vos chaînes avec Base64 encoder/décoder. L'outil fonctionne dans les deux sens et traite le résultat en UTF-8, donc le texte français ressort avec ses accents à leur place.
Tout s'exécute dans votre navigateur, ce qui compte davantage ici qu'ailleurs : si vous décodez un jeton ou un extrait de configuration, ces données n'ont rien à faire sur le serveur de qui que ce soit. Vous pouvez le vérifier en ouvrant l'onglet réseau de votre navigateur pendant l'utilisation — aucune requête ne part.