Comment décoder du Base64 en UTF-8
- Collez le Base64 dans Entrée · Base64. Jeu de caractères est préréglé sur UTF-8.
- Lisez le résultat dans Sortie · texte. La ligne d’état affiche le nombre d’octets et le type de contenu détecté.
- Si la ligne d’état indique « Certains octets ne sont pas de l’UTF-8 valide », le texte est dans un autre jeu de caractères. Essayez Détection automatique, Windows-1252 ou UTF-16LE.
- Copier la sortie copie le texte ; Télécharger enregistre les octets décodés sans modification.
Pour encoder dans l’autre sens, utilisez UTF-8 en Base64.
Exemples
| Base64 | Décodé en UTF-8 | Ce que cela montre |
|---|---|---|
8J+YgA== | 😀 | Un emoji, 4 octets |
4oKs | € | 3 octets, aucun remplissage nécessaire |
bmHDr3ZlIGNhZsOp | naïve café | Lettres accentuées, 2 octets chacune |
77u/SGk= | Hi | 5 octets : une marque d’ordre des octets, puis Hi |
Y2Fm6Q== | caf� | E9 est le é de Latin-1, invalide en UTF-8 |
8J+Y | � | Un emoji coupé après 3 de ses 4 octets |
Y2Fmw4PCqQ== | café | De l’UTF-8 valide d’un texte déjà corrompu |
Les trois dernières lignes correspondent aux problèmes traités plus bas : un mauvais jeu de caractères, une chaîne coupée et un texte déjà abîmé avant l’encodage.
UTF-8 invalide et caractère de remplacement
L’UTF-8 suit des règles strictes : un octet supérieur à 7F doit faire partie d’une séquence de 2, 3 ou 4 octets au motif fixe. Les octets qui enfreignent ce motif ne peuvent pas être lus comme de l’UTF-8. Le décodeur remplace chaque séquence cassée par U+FFFD (�) et ajoute la note « Certains octets ne sont pas de l’UTF-8 valide. Essayez un autre jeu de caractères. ». Rien n’est supprimé en silence : chaque � marque l’endroit exact d’un problème.
Deux causes couvrent presque tous les cas :
- Un autre jeu de caractères.
Y2Fm6Q==contient63 61 66 E9, soitcaféen ISO-8859-1 et en Windows-1252. Changez Jeu de caractères et le texte apparaît. La page du décodeur Base64 liste les symptômes courants pour chaque jeu de caractères. - Une chaîne tronquée. Si le Base64 a été coupé, par exemple par une limite de colonne en base de données ou une ligne de journal, le dernier caractère peut perdre une partie de ses octets.
8J+YgA==est un emoji complet ;8J+Yest le même emoji privé de son dernier octet, qui se décode en un seul�. Cherchez la valeur complète à la source.
Texte encodé deux fois (é et ’)
Quand la sortie affiche é pour é, ü pour ü ou ’ pour une apostrophe typographique, le décodeur n’y est pour rien. Plus tôt dans la chaîne de traitement, des octets UTF-8 ont été lus en Windows-1252 puis réenregistrés en UTF-8, ce qui transforme chaque caractère spécial en deux ou trois caractères erronés. Le Base64 conserve fidèlement ce texte abîmé : Y2Fmw4PCqQ== est l’UTF-8 valide de la chaîne de sept octets café.
On peut souvent réparer une telle chaîne dans le code en inversant l’erreur : encodez le texte en Windows-1252 et décodez les octets en UTF-8. La vraie correction se fait dans le système qui l’a écrit.
Marques d’ordre des octets
Certains éditeurs, surtout sous Windows, commencent les fichiers UTF-8 par les octets EF BB BF, une marque d’ordre des octets (BOM). En Base64, le fichier commence alors par 77u/. Le décodeur reconnaît la marque et l’exclut du texte, tandis que Télécharger conserve les octets exactement tels qu’ils étaient. Dans le code, vous devrez peut-être la retirer vous-même :
import base64
raw = base64.b64decode("77u/SGk=")
raw.decode("utf-8") # '\ufeffHi'
raw.decode("utf-8-sig") # 'Hi'
base64.b64decode("Y2Fm6Q==").decode("utf-8", errors="replace") # 'caf�'
Sans errors="replace", Python lève UnicodeDecodeError sur les octets invalides. En JavaScript, new TextDecoder("utf-8", { fatal: true }) lève une TypeError au lieu d’insérer �, et le décodeur par défaut retire le BOM comme cet outil. Plus de détails dans Base64 en Python et Base64 en JavaScript.
FAQ
Comment décoder du Base64 en chaîne UTF-8 ?
Décodez le Base64 en octets, puis interprétez ces octets en UTF-8. Ci-dessus, tout se fait en une étape. En Python, c’est base64.b64decode(s).decode("utf-8") ; dans un navigateur, new TextDecoder().decode(bytes).
Que signifie le caractère � dans la sortie ?
C’est U+FFFD, le caractère de remplacement. Le décodeur l’insère partout où les octets ne forment pas de l’UTF-8 valide, ce qui signifie en général que le texte a été encodé dans un autre jeu de caractères ou que le Base64 a été tronqué.
Pourquoi mon texte décodé commence-t-il par un caractère invisible ?
La source avait probablement une marque d’ordre des octets UTF-8 (Base64 commençant par 77u/). Cet outil la supprime, mais le simple .decode("utf-8") de Python la conserve sous la forme \ufeff ; utilisez "utf-8-sig" pour la retirer.
UTF-8 est-il le bon choix pour mon Base64 ?
Très probablement. JSON, le web, Linux et les API modernes utilisent tous l’UTF-8. Les données issues d’anciens programmes Windows ou de chaînes .NET et PowerShell peuvent être en Windows-125x ou en UTF-16.