Décoder un en-tête de courriel UTF8
j'ai un e-mail sujet de la forme:
=?utf-8?B?T3.....?=
le corps de l'email est utf-8 base64 encodé - et a décodé fine. Je suis à jour en utilisant le module E-Mail::MIME de Perl pour décoder l'e-mail.
Quelle est la signification du =?délimiteur utf-8 et comment puis-je extraire des informations de cette chaîne?
5 réponses
encoded-word
jetons (comme par RFC 2047) peut apparaître dans les valeurs de certains en-têtes. Ils sont analysés comme suit:
=?<charset>?<encoding>?<data>?=
Charset est UTF-8 dans ce cas, l'encodage est B
ce qui signifie base64 (l'autre option est Q
ce qui signifie Quoted Printable).
pour le lire, décoder d'abord la base64, puis le traiter comme des caractères UTF-8.
lire aussi les différents RFC de courrier Internet pour plus de détails, principalement RFC 2047.
Puisque vous utilisez Perl, Encoder:: MIME:: Header pourrait être d'utilisation:
SYNOPSIS
use Encode qw/encode decode/; $utf8 = decode('MIME-Header', $header); $header = encode('MIME-Header', $utf8);
ABSTRACT
ce module implémente RFC 2047 Mime L'En-Tête De L'Encodage. Il y a 3 variantes noms d'encodage; en-tête MIME, MIME-B et MIME-Q. la différence est décrites ci-dessous
decode() encode() MIME-Header Both B and Q =?UTF-8?B?....?= MIME-B B only; Q croaks =?UTF-8?B?....?= MIME-Q Q only; B croaks =?UTF-8?Q?....?=
je pense que le module D'encodage gère cela avec le MIME-Header
encodage, alors essayez ceci:
use Encode qw(decode);
my $decoded = decode("MIME-Header", $encoded);
MIME:: Words de MIME-les outils fonctionnent bien aussi pour cela. J'ai couru dans un problème d'Encoder et de trouvé MIME::Mots réussi sur certaines chaînes où Encoder n'a pas.
use MIME::Words qw(:all);
$decoded = decode_mimewords(
'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
);