Grmpf! Il y a des clients mail windows qui ne suivent pas la RFC 1522 (quelle surprise, me direz-vous), et ça donne des sujets de mail imcompréhensible pour
- le module MIME::WordDecoder de perl
- le logiciel ripmime
Par exemple, voici un extrait de mail reçu:
...
Subject: Avis de =?windows-1252?Q?r=E9ception_d=27un_paiement=5D?=
...
Pour les "=E9", "=27" et "=5D", pas de problèmes, c'est standard. Mais comment gérer le "?windows-1252...", en perl de préférence ?
# meuh
Posté par gc (site web personnel) . Évalué à 2.
[gc@meuh /tmp] echo 'r=E9ception_d=27un_paiement=5D' | perl -pe 's/=(..)/pack("H*", $1)/eg' | iconv -f windows-1252 -t utf8
réception_d'un_paiement]
[^] # Re: meuh [Résolu ?]
Posté par Arnaud . Évalué à 2.
--8<--8<--8<--8<--8<---
encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
--8<--8<--8<--8<--8<---
(RFC 1522, paragraphe 2)
On ne peut pas utiliser n'importe quel charset (RFC 1522, paragraphe 2), mais seulement ceux définits dans la RFC 1521:
--8<--8<--8<--8<--8<---
charset := "us-ascii"/ "iso-8859-1"/ "iso-8859-2"/ "iso-8859-3"
/ "iso-8859-4"/ "iso-8859-5"/ "iso-8859-6"/ "iso-8859-7"
/ "iso-8859-8" / "iso-8859-9" / extension-token
--8<--8<--8<--8<--8<---
(RFC 1521, paragraphe 7.1.2)
Je pourrais supprimer le "?windows-1252?Q?" en début de sujet et le "?=" en fin de sujet, mais j'aurais alors des problèmes quand il y a différence entre le charset windows-1252 et le charset iso-8859-1 (car le charset Windows contient des symboles particuliers, comme l'euro, le trademark, etc etc). C'est là qu'intervient la combinaison pack+iconv de gc que je ne connaissait point (merci!)
Donc, ça va donner quelque chose du genre:
SI le sujet comment par "?windows-1252?Q?" ALORS
SUPPRIMER en début le "?windows-1252?Q?"
SI la fin du sujet se termine par "?=" (ça doit!, mais vérifions) ALORS
SUPPRIMER en fin le "?="
FIN SI
Faire la convertion Windows-1252->UTF-8 à a main (pack, iconv)
SINON
Utiliser unmime de MIME::WordDecoder
FIN SI
[^] # Re: meuh [Résolu ?]
Posté par gc (site web personnel) . Évalué à 1.
par contre, avec cette liste, comment faire pour passer le caractère Euro ? avec une telle liste on ne peut pas jeter la pierre à un logiciel voulant passer le caractère euro d'utiliser windows-1252 ou utf-8...
il est possible que la liste ait été amendée vu l'âge respectable de la RFC mais je n'ai rien trouvé de tel.
[^] # Re: meuh [Résolu ?]
Posté par Arnaud . Évalué à 1.
J'ai fait un test avec le caractère Euro (client KMail), le charset utilisé est iso-8859-15. Ça ne respecte pas la RFC, mais au moins, c'est un charset ISO. L'UTF-8 serait la solution, surement, mais peut être pas la meilleur (à quand des mails en XML ? Hélas, jamais)
# La soluce "propre"
Posté par Arnaud . Évalué à 1.
#!/usr/bin/perl
use MIME::WordDecoder;
$wd = new MIME::WordDecoder;
$wd->handler('WINDOWS-1252' => "KEEP");
$wd->handler('*' => "KEEP");
$subject = "[Fwd: Avis de =?windows-1252?Q?r=E9ception_d=27un_paiement=5D?=";
print $wd->decode ($subject)."\n";
Voila pour la partie PERL. A présent, je m'attaque à ripmime :-)
# un truc utile a connaitre ...
Posté par Mouns (site web personnel) . Évalué à 2.
cela permet de gerer quasiment l'ensemble des merdiers de charset en perl et en prime de pouvoir tenter de deviner comment une chaine est encodé ...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.