On Tuesday 18 July 2006 15:39, Dmitry E. Oboukhov wrote: > > Не надо. Это регулярное выражение есть внутри самого WordDecoder. Вы ему > > просто спихиваете все заголовки, которые есть в письме, не разбираясь, > > что там в них, а WordDecoder вернет уже плейнтекст в нужной вам > > кодировке. > > а зачем же тогда писать отдельные функции на utf и cp1251 как было в > примере выше? Потому что, чтобы он вернул в нужной кодировке, я не нашел лучшего способа, как перечислить возможные исходные кодировки и методы их перекодирования. Я подчеркиваю, что просто не разбирался и не искал более универсального способа. > > > > идеально бы было конечно чтобы в случае с $parser->decode_headers(1); > > > хидеры возвращались бы приведенные к utf-8 (или к локали) > > > но это патчить надо MIME-tools > > > > С WordDecoder'ом - это один цикл. > > что-то я не въеду > читаю описалово на этот MIME-декодер и не въезжаю > туплю чтоли? > > можно пример раскодирования хидера в _произвольной_ кодировке с > возвратом utf-8 строки? Передо мной такой задачи не стояло :) Мне нужно было только русские кодировки обработать и перегнать строчки из заголовков в KOI8-R. Возможно, чтобы решить вашу задачу, придется патчить WordDecoder. Но это определенно проще, чем заново его писать. > > > > а костыль расчитанный только на пару русских кодировок получается > > > хреновым, ибо как только появится третья русская кодировка в хидере или > > > четвертая нерусская и кранты :( > > > все таблицы не напишешь в виде функций > > > > Покопайтесь в кишках WordDecoder. Может там есть возможность обрабатывать > > кодировки не по табличке, а прямо передавать в Text::Iconv, чтобы он на > > выходе уже UTF-8 делал. > > ну вот я так примерно и написал: > 1. определяю кодировку из регвыражения выше > 2. раскодирую B или Q в plain-text > 3. делаю iconv раскодированного в utf > 4. делаю замену регвыражения в полученное из п.3 > 5. если регвыражение все еще есть, то п.1 иначе конец И это правильно. Так, в общем случае, и надо делать. Чем же вам это решение не понравилось? > > PS. Теперь у меня еще вопрос. Про Text::Iconv. Есть ли в нем возможность, > > чтобы при обнаружении символов, отсутствующих в целевой кодировке, он > > пропускал эти символы (или заменял их на вопросик какой-нибудь)? У > > iconv(1) такая опция есть (omit invalid characters), а вот Text::Iconv > > сразу при этом спотыкается и возвращает undef. > > Text::Iconv->raise_error(0); > разве не так делает? или оно просто скипает? raise_error(1) делает die, raise_error(0) возвращает undef > ща попробую -- Best regards. Alexander Lourier. http://aml.rulezz.ru
Attachment:
pgpZbkvuTvLBg.pgp
Description: PGP signature