Charger un fichier
  1. base64hub
  2. Outils web et jetons
  3. Quoted-printable

Encodeur et décodeur Quoted-Printable

Décodez le texte quoted-printable d’un e-mail, comme Gr=C3=BC=C3=9Fe, pour retrouver Grüße, ou encodez du texte comme le font les logiciels de messagerie : =XX pour les octets qui l’exigent et des sauts de ligne souples à 76 caractères.

Gratuit sans inscription, sans limites Local rien n'est envoyé Python identique octet pour octet à binascii.b2a_qp Mis à jour 27 oct. 2026
Entrée 0Octets 0 BSortie 0

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

Comment décoder du quoted-printable

  1. Cliquez sur Quoted-printable → Texte au-dessus de l’outil pour passer en décodage.
  2. Collez le texte encodé dans l’entrée, par exemple une partie du corps copiée depuis la source d’un e-mail.
  3. Lisez le texte dans la sortie. Si les lettres accentuées s’affichent mal, réglez Jeu de caractères sous la sortie sur le jeu indiqué dans l’en-tête Content-Type de la partie, par exemple charset=iso-8859-1.
  4. Utilisez Copier la sortie ou Télécharger. Les sauts de ligne souples sont recollés et chaque =XX redevient son octet.

Pour encoder, laissez le sens sur Texte → Quoted-printable et saisissez ou collez le texte. Le Jeu de caractères sous l’entrée détermine les octets produits pour les caractères non ASCII.

Comment fonctionne le quoted-printable

Le quoted-printable (RFC 2045, section 6.7) garde le texte lisible autant que possible et n’échappe que le strict nécessaire :

  • Les caractères ASCII imprimables restent tels quels, sauf =.
  • Tout autre octet s’écrit = suivi de deux chiffres hex en majuscules. En UTF-8, chaque caractère non ASCII devient donc deux à quatre échappements.
  • = lui-même devient =3D.
  • Une espace ou une tabulation en fin de ligne devient =20 ou =09.
  • Les lignes font au plus 76 caractères. Les plus longues sont coupées par un saut de ligne souple : un = en fin de ligne, que le décodeur supprime.
TexteQuoted-printable
cafécaf=C3=A9
Grüße aus MünchenGr=C3=BC=C3=9Fe aus M=C3=BCnchen
100% = €5100% =3D =E2=82=AC5
<p style="color:red">Hi</p><p style=3D"color:red">Hi</p>
Caf=E9 décodé en ISO-8859-1Café

Dans la dernière ligne, =E9 est un seul octet : é en ISO-8859-1 et en Windows-1252, mais un octet non valide à lui seul en UTF-8. Le résultat dépend donc du jeu de caractères choisi pour le décodage.

Mode texte et mode binaire

Par défaut, l’encodeur traite l’entrée comme du texte. Les sauts de ligne restent de vrais sauts de ligne et, comme avec binascii.b2a_qp en Python, si la première ligne se termine par CRLF, un LF isolé plus loin devient lui aussi CRLF. C’est le bon comportement pour du texte d’e-mail, mais cela modifie les octets.

Cochez Encoder les sauts de ligne (binaire) quand les octets exacts comptent. Les sauts de ligne s’écrivent alors =0D et =0A : Hello, CRLF, World devient Hello=0D=0AWorld, et le décodage rend exactement ce qui est entré. Pour de vraies données binaires comme des images, Base64 reste de toute façon le meilleur choix.

Quoted-printable ou Base64 dans les e-mails

Le logiciel de messagerie choisit le Content-Transfer-Encoding pour chaque partie MIME. Le quoted-printable convient au texte surtout ASCII, car il reste lisible et grossit peu. Base64 a un surcoût fixe d’environ 33 % et l’emporte dès que la plupart des octets doivent être échappés :

TexteOctets UTF-8Quoted-printableBase64
Grüße aus München2032 caractères28 caractères
Привет, мир (russe)2056 caractères28 caractères

Même un texte allemand avec trois lettres non ASCII sur 17 caractères est déjà plus long en quoted-printable qu’en Base64 ; le cyrillique fait le double de la taille Base64. Pour produire la forme Base64 avec les lignes de 76 caractères qu’exige l’e-mail, utilisez l’encodeur Base64 MIME. Base64 dans les e-mails explique comment les deux encodages apparaissent dans un message, pièces jointes et en-têtes encodés compris.

Lire un e-mail complet

Copier une partie du corps depuis un message brut suffit pour un coup d’œil rapide. Pour un fichier .eml complet, le décodeur EML analyse les en-têtes, décode les parties quoted-printable et Base64 avec leurs jeux de caractères déclarés, et liste les pièces jointes à télécharger. Le quoted-printable existe aussi en dehors des e-mails, par exemple dans les fichiers vCard 2.1 avec ENCODING=QUOTED-PRINTABLE ; collez ici la valeur qui suit les deux-points.

Le quoted-printable dans le code

import quopri
quopri.encodestring("café".encode("utf-8"))            # b'caf=C3=A9'
quopri.decodestring(b"caf=C3=A9 =3D 5=E2=82=AC").decode("utf-8")   # 'café = 5€'

Le paquet email de Python applique automatiquement le bon décodage : msg.get_payload(decode=True) renvoie les octets décodés d’une partie, quel que soit son encodage de transfert. La page Python couvre le côté Base64.

FAQ

Que signifie =3D dans un e-mail ?

C’est un signe égal encodé. En quoted-printable, = ouvre un échappement : un = littéral doit donc s’écrire =3D, la valeur de son octet en hex. On le croise souvent dans les e-mails HTML, par exemple style=3D"color:red".

Pourquoi les lignes de la source d'un e-mail se terminent-elles par = ?

C’est un saut de ligne souple. Une ligne quoted-printable fait au plus 76 caractères : les lignes plus longues sont coupées et chaque coupure est marquée par un = final. Le décodeur recolle les morceaux en une seule ligne.

Que signifie =20 en fin de ligne ?

Une espace encodée. Les systèmes de messagerie peuvent supprimer les espaces en fin de ligne ; le quoted-printable protège donc une espace ou une tabulation finale en l’écrivant =20 ou =09.

Comment décoder du quoted-printable en Python ?

quopri.decodestring(data) ou binascii.a2b_qp(data) renvoient des octets ; appelez ensuite .decode("utf-8") ou le jeu de caractères indiqué dans l’en-tête Content-Type.

Peut-il décoder les objets de la forme =?UTF-8?Q?...?= ?

Pas sur cette page. Ce sont des encoded words RFC 2047, qui utilisent un encodage Q apparenté avec _ pour les espaces. Le décodeur EML les décode dans les en-têtes, en plus des corps en quoted-printable.