Charger un fichier
  1. base64hub
  2. Outils texte
  3. Base64 en UTF-16

Base64 en UTF-16 : décoder du texte UTF-16LE et BE

Collez du Base64 qui contient du texte UTF-16 et lisez-le comme une chaîne normale. La page démarre en UTF-16LE, l’encodage par défaut de Windows et .NET ; passez en UTF-16BE si la sortie se transforme en caractères CJK.

Gratuit sans inscription, sans limites Local rien n'est envoyé Mis à jour 27 oct. 2026
Entrée 0 BSortie 0 BTaille –

Traité dans votre navigateur. Cette page ne peut envoyer vos données nulle part – comment le savons-nous

Comment décoder du Base64 en UTF-16

  1. Collez le Base64 dans Entrée · Base64. Jeu de caractères est préréglé sur UTF-16LE.
  2. Lisez le texte dans Sortie · texte. Le champ Ressemble à indique en général Binaire, car le détecteur considère les octets nuls comme un signe de données binaires ; la sortie texte reste correcte.
  3. Si le résultat est une suite de caractères qui ressemblent à du CJK, passez Jeu de caractères sur UTF-16BE.
  4. Si les données commencent par une marque d’ordre des octets, Détection automatique choisit le bon ordre et supprime la marque.
  5. Copier la sortie copie le texte ; Télécharger enregistre les octets bruts.

Pour le sens inverse, voir UTF-16 en Base64.

Reconnaître de l’UTF-16 dans du Base64

Le Base64 d’un texte UTF-16 a un rythme visible. Un texte ASCII en UTF-16 alterne octets de lettres et octets nuls, et les bits à zéro correspondent à A dans l’alphabet Base64 : un A apparaît donc tous les quelques caractères.

Base64Ordre des octetsDécodé
SABlAGwAbABvAA==LE, sans BOMHello
AEgAZQBsAGwAbw==BE, sans BOMHello
//5IAGkALE avec BOM FF FEHi
/v8ASABpBE avec BOM FE FFHi
RwBlAHQALQBEAGEAdABlAA==LE, sans BOMGet-Date

Un texte ASCII en big-endian commence toujours par A, puisque son premier octet est nul. Une chaîne qui commence par //4 ou /v8 débute par une marque d’ordre des octets.

Ordre des octets, BOM et détection automatique

Lu avec le mauvais ordre des octets, chaque paire d’octets est permutée et un texte anglais se change en idéogrammes CJK : AEgAZQBsAGwAbw== décodé en UTF-16LE donne 䠀攀氀氀漀. Rien n’est perdu ; changer Jeu de caractères suffit.

Détection automatique gère l’UTF-16 de façon fiable quand les données commencent par un BOM. Sans BOM, un texte ASCII simple en UTF-16 est aussi de l’UTF-8 valide (les octets nuls y sont autorisés) : la détection automatique peut donc le prendre pour de l’UTF-8 avec des caractères invisibles. Sur cette page, gardez UTF-16LE ou UTF-16BE sélectionné à la main, sauf si vous voyez //4 ou /v8 au début.

Un nombre impair d’octets indique un problème. SABpAAA= contient 5 octets ; décodé en UTF-16LE, il donne Hi suivi d’un �. Soit la valeur a été tronquée, soit ce n’est pas de l’UTF-16 du tout.

D’où vient le Base64 en UTF-16

La source la plus fréquente est PowerShell. Les commandes encodées comme powershell -enc SQBFAFgA... apparaissent dans les tâches planifiées, les scripts d’installation et les journaux de sécurité, et leur Base64 est toujours en UTF-16LE. Le décodeur PowerShell EncodedCommand extrait la valeur d’une ligne de commande complète et cherche d’autres blocs Base64 dans le script.

On en trouve aussi dans les programmes .NET qui appellent Convert.ToBase64String(Encoding.Unicode.GetBytes(...)), dans les données du registre et des journaux d’événements Windows, et dans les valeurs SQL Server NVARCHAR exportées en binaire.

Décoder du Base64 UTF-16 dans le code

import base64

raw = base64.b64decode("SABlAGwAbABvAA==")
raw.decode("utf-16-le")                           # 'Hello'
base64.b64decode("/v8ASABp").decode("utf-16")     # 'Hi', byte order taken from the BOM

Python lève UnicodeDecodeError: truncated data sur un nombre impair d’octets.

// Node.js: little-endian only
Buffer.from("SABlAGwAbABvAA==", "base64").toString("utf16le");   // "Hello"
// Browsers and Node.js: either order
new TextDecoder("utf-16be").decode(Uint8Array.from(atob("AEgAZQBsAGwAbw=="), c => c.charCodeAt(0)));   // "Hello"

En C#, Encoding.Unicode.GetString(Convert.FromBase64String(s)) lit de l’UTF-16LE et Encoding.BigEndianUnicode lit du big-endian. Voir aussi Python et Node.js.

FAQ

Comment savoir si du Base64 contient de l'UTF-16 ?

Cherchez de nombreux caractères A qui reviennent à intervalles réguliers, comme dans SABlAGwAbABvAA== : en UTF-16, chaque lettre ASCII est accolée à un octet nul. Un //4 ou /v8 en tête correspond à une marque d’ordre des octets (BOM) UTF-16.

Pourquoi est-ce que je vois des caractères chinois après le décodage ?

L’ordre des octets est inversé. Hello en big-endian lu en little-endian devient 䠀攀氀氀漀. Basculez Jeu de caractères entre UTF-16LE et UTF-16BE.

Pourquoi y a-t-il un � à la fin du texte ?

L’UTF-16 exige un nombre pair d’octets. Un nombre impair signifie que le Base64 a été tronqué ou qu’il ne s’agit pas d’UTF-16 ; l’octet restant devient le caractère de remplacement.

Comment décoder un -EncodedCommand PowerShell ?

La valeur qui suit -EncodedCommand (ou -enc) est du Base64 en UTF-16LE : cette page la décode donc. Le décodeur PowerShell accepte aussi la ligne de commande entière et retrouve les payloads imbriqués.