> > есть письмо в stdin > > кормлю его MIME::Parser'у > > далее хочу получить раскодированные заголовки (например From и To) > > как просто получить заголовок закодированный в utf-8 или в кодировке > > текущей локали (а не отправителя)? > > Значения полей с не ASCII-символами в заголовке должны кодироваться строчками > вида "=?KOI8-R?Q?=EF=CC=C5=C7_=E1=CE=C9=D3=C9=CD=CF=D7?= > <[EMAIL PROTECTED]>". > > Раскодировать их умеет модуль 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 :( а костыль расчитанный только на пару русских кодировок получается хреновым, ибо как только появится третья русская кодировка в хидере или четвертая нерусская и кранты :( все таблицы не напишешь в виде функций -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]