Le vendredi 14 novembre, Frédéric Mantegazza a écrit :
> Je vous avais parle d'un probleme que j'ai avec hypermail. Depuis quelques
> temps, tous les sujets (et uniquement les sujets) des messages archives
> apparaissent dans le genre:
>
> =?iso-8859-1?Q?Mise au point d=27enceintes?=
Représentation définie dans le RFC 2047 (Message Header Extensions for
Non-ASCII Text) :
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
Dans ton exemple :
- charset = iso-8859-1 ;
- encoding = Q (c.-à-d. quoted-printable) ;
- encoded text = Mise au point d=27enceintes
SAUF QUE : tu n'as pas le droit d'avoir des espaces dans un
encoded-word. Donc c'est tout à fait normal que ce ne soit pas décodé :
d'après le RFC ce n'est pas vraiment un encoded-word, et il n'y a donc
rien à décoder. Très vraisemblablement un bogue du mailer utilisé pour
écrire le mail en question.
> Je n'ai pas reussi a trouve d'ou provenait le probleme.
Tu n'as pas réussi à récupérer le mail original pour voir s'il est
véreux ?
> Ce que je voudrais donc faire, c'est passer les pages html a la moulinette
> pour retransformer tout ca correctement. Avant de pondre quelque chose (en
> python, bien sur ;o) ), je voudrais savoir s'il n'existe pas deja un outil
> pour ca ?
J'ai trouvé le package Perl MIME::Head qui permet de décoder les
en-têtes RFC 2047. Regarde en particulier la méthode decode :
http://search.cpan.org/~eryq/MIME-tools-5.411a/lib/MIME/Head.pm#decode
MAIS : Il y a des chances que ça ne marche pas si, comme dans ton
exemple, l'encodage de l'en-tête n'est pas conforme au RFC. Dans ce cas
il faut que tu fasses ta propre fonction de décodage boguée, pour être
bogue-compatible avec le mailer en question.
En Perl je ferais un truc du genre (pas testé) :
# Is this an encoded word?
if (/^(.*) =\? .*? \? (\w) \? (.*?) \?= (.*)$/x) {
# B encoding means base64
if ($2 =~ /b/i) { $3 = decode_base64($3); }
# Q is quoted-printable
elsif ($2 =~ /q/i) { $3 = decode_qp($3); }
# Others are unknown
else { warn "Unknown encoding type $2\n"; }
# Re-assemble the line
$_ = "$1$3$4";
}
Edgar.
PS : Ils font vraiment c*** les gens qui programment des mailers sans
avoir lu les RFC avant.
--
Edgar Bonet Maison : 04 76 21 29 16 Bureau : 04 76 88 10 96
3 rue Jean Prévost Mobile : 06 77 19 79 39 Fax : 04 76 88 11 91
38000 Grenoble guilde@??? www.edgar-bonet.org