my @emails = split /\n/, q|foo =?utf-8?B?UGF1c2UgRG9yw6ll?= =?UTF-8?Q?Village_Bambous_=2D_Chambre_d=27_H=C3=B4tes?= =?utf-8?B?YmVybmFyZCB2ZXJpdMOp?= =?ISO-8859-1?B?TGHrdGl0aWE=?= Picot =?iso-8859-1?Q?Ancie_chambres_d=27h=F4tes?= |; use utf8; use Encode qw(encode decode); foreach (@emails) { $_ = decode('MIME-Header', $_); print "FOO: $_\n"; print $IN->header; use Data::Dumper; print Dumper($_); print "FOO: " . utf8::is_utf8($_) . "\n"; if (utf8::is_utf8($_)) { print "content..\n"; $_ =~ s/([\200-\377]+)/from_utf8({ -string => $1, -charset => 'ISO-8859-1'})/eg; } print Dumper($_); print "FOO: " . utf8::is_utf8($_) . "\n"; print "\n\n"; } #### FOO: foo Content-type: text/html; charset=iso-8859-1 $VAR1 = 'foo '; FOO: $VAR1 = 'foo '; FOO: FOO: Pause Dorée $VAR1 = "Pause Dor\x{e9}e "; FOO: 1 convert.. $VAR1 = "Pause Dor\x{e9}e "; FOO: 1 FOO: Village Bambous - Chambre d' Hôtes $VAR1 = "Village Bambous - Chambre d' H\x{f4}tes "; FOO: 1 convert.. $VAR1 = "Village Bambous - Chambre d' H\x{f4}tes "; FOO: 1 FOO: bernard verité $VAR1 = "bernard verit\x{e9} "; FOO: 1 convert.. $VAR1 = "bernard verit\x{e9} "; FOO: 1 FOO: Laëtitia Picot $VAR1 = "La\x{eb}titia Picot "; FOO: 1 convert.. $VAR1 = "La\x{eb}titia Picot "; FOO: 1 FOO: Ancie chambres d'hôtes $VAR1 = "Ancie chambres d'h\x{f4}tes "; FOO: 1 convert.. $VAR1 = "Ancie chambres d'h\x{f4}tes "; FOO: 1 #### $_ = decode('MIME-Header', $_); #### if (utf8::is_utf8($the_from)) { $the_from = encode('iso-8859-1', $_); }