On Thu, May 21, 2009 at 12:06:21AM +0400, Михаил Шувалов wrote: > В Срд, 20/05/2009 в 10:33 +0400, Afanasov Dmitry пишет: > > On Wed, May 20, 2009 at 02:04:58AM +0400, Михаил Шувалов wrote: > > > и как посоветуете перекодировать имена файлов из 1251 в юникод? (про > > > гугл я знаю :) ) > > сначала надо перекодировать из mime'ового бреда (uuencode ли quoted > > printable) в нормальную кодировку> > > Это все, как я понял относится к _содержимому_ файла. Здесь все > нормально. Нужно перекодировать именно _имя_ файла. неа, не только :) вчера поразвлекался, вспомнил: например возмем крякозябру Subject: Re: [room] =?koi8-r?b?89fR3cXOzsnLINrBzsnNwcXU09Eg0M/E09TSxcvB1MXM?= =?koi8-r?b?2NPU18/NIMsg0MnSwdTT1NfV?= классическая 7bit'ная кодировка, в которой и имена файлов кодируются в mime-аттачах.
формат этого бреда следующий: =?charset?encoding?encoded-text?= =? и ?= : органичители encoding: b - base64, q - quoted printable, uuencode вроде не встречался. на перле таким занимается модулек MIME::Words хха, я тут набаловался, в аттаче скриптинка, что этот бред, взятый из stdin'а, переводит и выводит на stdout :) требует perl-MIME-tools -- С уважением Афанасов Дмитрий
#!/usr/bin/perl -w
use MIME::Words qw/decode_mimewords/;
use Text::Iconv;
use I18N::Langinfo qw(langinfo CODESET);
my $localcharset = langinfo(CODESET());
while(<>)
{
my @text;
foreach $pair (decode_mimewords($_))
{
my ($text, $charset) = @$pair;
unless($charset)
{
push @text, $text;
next;
}
my $converter = Text::Iconv->new($charset, $localcharset);
push @text, $converter->convert($text);
}
print @text;
}
signature.asc
Description: Digital signature
_______________________________________________ Sysadmins mailing list [email protected] https://lists.altlinux.org/mailman/listinfo/sysadmins
