The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Perl функция для quoted-printable к..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Perl функция для quoted-printable к..."  +/
Сообщение от auto_tips (ok) on 11-Фев-09, 01:38 
Популярный Perl модуль MIME::Words  не обеспечивает quoted-printable кодирование
в полном соотвтетвии с  RFC2047 (пробелы между двумя закодированными блоками недопустимы).

# rfc2047conv (строка, кодировка, размер префикса);
sub rfc2047conv{
    my $str      = shift;       # чего кодировать
    my $charset  = uc(shift);   # какую кодировку приписать
    my $init_len = shift || 0;  # длина того, что планируется добавить потом в начало строки

    my $len = length($str);

    return '' unless($len);

    my $begin = "=?$charset?Q?";
    my $res   = $begin;
    my $count = $init_len + length($begin);
    foreach my $c (split(//, $str)) {
        my ($repl, $repl_len);
        if($c eq '?' || $c eq '_' || $c eq '=' || $c lt ' ' || $c gt '~') {
            $repl     = sprintf("=%X", ord($c));
            $repl_len = 3;
        } elsif($c eq ' ') {
            $repl     = '_';
            $repl_len = 1;
        } else {
            $repl     = $c;
           $repl_len = 1;
        }
        if($count + $repl_len > 72) {
            $res  .= "?=\r\n " . $begin;
            $count = 1 + length($begin);
        }
        $res   .= $repl;
        $count += $repl_len;
    }
    $res .= '?=';
    return $res;
}
printf("[%s]\n", rfc2047conv("проверка ", 'KOI8-R', length('Subject: ')));


URL: http://www.opennet.ru/openforum/vsluhforumID4/220.html#6
Обсуждается: http://www.opennet.ru/tips/info/1008.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Perl функция для quoted-printable кодирования в соответствии"  +/
Сообщение от Stanislaus email(ok) on 11-Фев-09, 01:38 
Еще стоит взглянуть на Encode::MIME::Header, который позволяет производить эти манипуляции так:    
use Encode qw/encode decode/;
$utf8   = decode('MIME-Header', $header);
$header = encode('MIME-Header', $utf8);

правда только для UTF-8, но обычно больше ничего и не нужно. Главное, что бы хорошо работало. Использовать MIME::Words из MIME::Tools не советую.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Perl функция для quoted-printable кодирования в соответствии"  +/
Сообщение от dimedrol on 12-Июн-09, 10:08 
Спасибо автору!
Полезная функция. Но
в процессе эксплуатации заметил, что при переносе длинных строк, символы на границе строк могут быть перенесены некорректно, иногда разбиваются по середине, т.е. половина символа остается на одной строке, а вторая половина переносится на следую строку. Например, у меня была строка, в которой было слово 'найдено', и вот, как оно разбилось на части.
Буква 'д' , после кодирования должна превращаться в '=D0=B4' . Так вот '=D0' осталось на одной строке, а '=B4' перенеслось на следующую, и как следствие, при чтении этого письма в почтовом клиенте, вместо буквы д были два знака вопроса.

.....=D0=BD=D0=B0=D0=B9=D0?=
=?UTF-8?Q?=B4=D0=B5=D0=BD=D0=BE=A?=

Stanislaus писал:
>Еще стоит взглянуть на Encode::MIME::Header,

...

Я пробовал Encode::MIME::Header. Он у меня вообще не заработал:
https://rt.cpan.org/Public/Bug/Display.html?id=46832

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Perl функция для quoted-printable кодирования в соответствии..."  +/
Сообщение от nm11 email on 05-Май-10, 22:42 
спасибо пригодилось
для отправки смс через e-mail
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру