Re: добавим офтопега
> > есть письмо в stdin
> > кормлю его MIME::Parser'у
> > далее хочу получить раскодированные заголовки (например From и To)
> > как просто получить заголовок закодированный в utf-8 или в кодировке
> > текущей локали (а не отправителя)?
>
> Значения полей с не ASCII-символами в заголовке должны кодироваться строчками
> вида "=?KOI8-R?Q?=EF=CC=C5=C7_=E1=CE=C9=D3=C9=CD=CF=D7?=
> <o_anisimov@dobroe.ru>".
>
> Раскодировать их умеет модуль MIME::WordDecoder. Я писал что-то типа такого:
>
> my $wd = MIME::WordDecoder->new([
> 'US-ASCII' => sub { $_[0] },
> 'KOI8-R' => sub { $_[0] },
> 'WINDOWS-1251' => \&fromwin,
> 'CP1251' => \&fromwin,
> 'UTF8' => \&fromutf8,
> 'UTF-8' => \&fromutf8,
> '*' => sub { $_[0] },
> ]);
> ...
> $from = $wd->decode($from);
то есть фактически вручную раскодируем, что не очень изящно
разные части одного хидера могут быть закодированы в разные кодировки,
что совсем неудобно :-\
софтина работающая с произвольными кодировками получается не очень
красивой. то есть надо брать нераскодированный заголовок и рекурсивно из
него вытаскивать регвыражение вида:
/\?(.+)\?[BQ]\?.*?\?=/
раскодировать его, переводить из кодировки $1 в utf (или текующую кодировку)
идеально бы было конечно чтобы в случае с $parser->decode_headers(1);
хидеры возвращались бы приведенные к utf-8 (или к локали)
но это патчить надо MIME-tools
:(
а костыль расчитанный только на пару русских кодировок получается
хреновым, ибо как только появится третья русская кодировка в хидере или
четвертая нерусская и кранты :(
все таблицы не напишешь в виде функций
Reply to: