[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: