|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 16 Mar 2007 18:52:45 To : Eddie L.Verkhoturov Subject : Re: email attachment -------------------------------------------------------------------------------- Eddie L.Verkhoturov -> Artem Chuprina @ Fri, 16 Mar 2007 12:53:00 +0000 (UTC): >> > EL> Требуется перекодировать имена файлов-вложений email-ов из >> > EL> кирилических в транслит. Может быть кто-либо сталкивался со схожей >> > EL> задачей? Подскажите, пожалуйста, в каком направлении рыть (имена >> > EL> модулей, возможно кусочки кода, или быть существуют утилиты с таким >> > EL> функционалом). >> > Дело в том, что имена файлов в аттачах кодируют кто во что горазд. И >> > хорошо еще, если используют для этого _не тот_ стандарт (там есть >> > некоторая путаница), но все-таки стандарт... EL> Ммм... как вкусно... ууу... как больно! Однако решение должно же EL> быть, ведь всякие outlook-и, thunderbitd-ы все ж таки (наверное по EL> большей части) распутывают все эти вавилонские чудеса? Реже, чем через раз. Hу, сам с собой он обычно совместим... >> > Давай так. Ты показываешь надыбанные заголовки аттачей, а мы пытаемся >> > угадать, есть ли модуль для этого варианта, и по какому признаку надо >> > использовать именно его :-) EL> Вот, парочку надыбал: EL> ==== EL> Content-Type: application/msword; EL> name="=?windows-1251?Q?=B9_=C8=C0-9=40_=EE=F2_16=2E03=2E2007=2Edoc?=" EL> Content-transfer-encoding: base64 EL> Content-Disposition: attachment; EL> filename="=?windows-1251?Q?=B9_=C8=C0-9=40_=EE=F2_16=2E03=2E2007=2Edoc?=" EL> ====> Вот таки вот длиннючие имена файлов тоже бывают EL> Content-Type: application/msword; EL> EL> name="=?koi8-r?B?9dDSwdfMxc7Jxc0gzdXOycPJ0MHM2M7Px88gyc3V3cXT1NfBIMHEzQ==?= EL> EL> =?koi8-r?B?yc7J09TSwcPJySDHz9LPxMEgIOzJ187ZIMLZzCDQ0snPwtLF1MXOIA==?= EL> =?koi8-r?B?1SDm5/XwIObr4y5kb2M=?=" Content-Transfer-Encoding: EL> base64 Content-Disposition: attachment; EL> filename="=?koi8-r?B?9dDSwdfMxc7Jxc0gzdXOycPJ0MHM2M7Px88gyc3V3cXT1NfBIMHEzQ EL> ==?= EL> =?koi8-r?B?yc7J09TSwcPJySDHz9LPxMEgIOzJ187ZIMLZzCDQ0snPwtLF1MXOIA==?= EL> =?koi8-r?B?1SDm5/XwIObr4y5kb2M=?=" Это (оба комплекта) аутлуковское нарушение. Используется стандарт, по счастью, но не тот. Это RFC 2047, и лечится модулем MIME::Words. Признак - /^\s*=\?([^?]*)\?[BQ]\?/ Там еще в конце обязательно \?=, которое регулярно ломается. Hо это уже пусть MIME::Words ругается "что за фигню подсунули". То, что в регулярном выражении в круглых скобочках, т.е. после успеха сравнения будет в $1 (а в самом параметре - между первым и вторым вопросительными знаками) - кодировка того, что выдаст MIME::Words. Она тебе понадобится для правильной перекодировки. Подсовывать, скорее всего, надо все значение параметра целиком. Все несколько строчек, что между кавычками. Сами кавычки - не надо. EL> PS: А вообще, хоть меня и достали такие имена в почтовых файлах от EL> юзеров (воспитать их нет никакой возможности), но проблема еще EL> кроме того из-за того, что у меня письма, с такими вложениями в EL> otrs укладываются с кракозябрами. Ага, разработчику написал, однако EL> молчат. А я не настолько силен в perl, чтобы разобраться в чем там EL> кроется проблема, вот и решил по-быстрому сваять некую нашлепку, EL> чтоб значит транслитом ударить по бездорожью. Hеужто по-быстрому не EL> получится? В транслит тебе, скорее всего, штатный Encode переведет. Если нет - тут есть знатоки этих перекодировок получше меня. А вот раскодировать... Да, надо помнить, что в раскодированных именах будут пробелы. В тех примерах, где кодирование Q, их даже видно (это то, что _). И перекодировка в транслит их, если что, оставит где были. -- Artem Chuprina RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru Все события вымышлены, после чего искажены. <lj user=mcdowns> --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/25606e97b2171.html, оценка из 5, голосов 10
|