Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как представить тему письма в нормальном виде? [D7, WinXP]


JanMihail ©   (2008-06-15 10:56:00) 

Узнаю при помощи POP3 тему письма, а мне выходит такая строка
?koi8-r?B?98vPztTBy9TFLtLV?= <admin@vkontakte.ru>

Как мне представить эту строку в нормальном виде?


Hero   (2008-06-16 04:21:00) [1]

[2]

спасибо! Как раз кстати


JanMihail   (2008-06-15 15:22:00) [2]

Чуть не забыл. Два глобальных массива

var
 Koi: array[0..66] of Char = (
   'T', 'Ё', 'ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж',
   'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
   'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ',
   'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д',
   'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о',
   'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш',
   'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');

 Win: array[0..66] of Char = (
   'ё', 'Ё', 'T', 'ю', 'а', 'б', 'ц', 'д', 'е', 'ф',
   'г', 'х', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п',
   'я', 'р', 'с', 'т', 'у', 'ж', 'в', 'ь', 'ы', 'з',
   'ш', 'э', 'щ', 'ч', 'ъ', 'Ю', 'А', 'Б', 'Ц', 'Д',
   'Е', 'Ф', 'Г', 'Х', 'И', 'Й', 'К', 'Л', 'М', 'Н',
   'О', 'П', 'Я', 'Р', 'С', 'Т', 'У', 'Ж', 'В', 'Ь',
   'Ы', 'З', 'Ш', 'Э', 'Щ', 'Ч', 'Ъ');


JanMihail   (2008-06-15 15:21:00) [3]

Решил проблему. Если у кого-то возникала такая проблема, то поможет такая функция:

//Использование функции
//AMsg типа TIdMessage предварительно инициализированная
 KoiToWin(AMsg.From.Address);
 KoiToWin(AMsg.Subject);



function KoiToWin(Str: string): string;
var
 i, j, index, x1, x2 : Integer;
 sTemp               : String;
begin
 Result := '';

 sTemp := Str;

 x1 := Pos('=?koi8-r?B?', sTemp);

 if x1 = 0 then
   x1 := Pos('=?KOI8-R?B?', sTemp);

 x2 := Pos('?=', sTemp);

 if (x2 - x1 > 0) and (x1 <> 0) and (x2 <> 0) then
 begin
   Str := copy(sTemp, x1 + 11, x2 - (x1 + 11));
   Str := TIdDecoderMIME.DecodeString(Str);

   for i := 1 to Length(Str) do
   begin
     index := -1;
     for j := Low(Win) to High(Win) do
       if Koi[j] = Str[i] then
       begin
         index := j;
         Break;
       end;

     if index = -1 then
       Result := Result + Str[i]
     else
       Result := Result + Win[index];
   end;

   delete(sTemp, x1, x2 - x1 + 2);
   insert(Result, sTemp, x1);
 end;

 Result := sTemp;
end;


Anatoly Podgoretsky   (2008-06-15 11:37:00) [4]

> JanMihail  (15.06.2008 10:56:00)  [0]

Как правило библиотека имеет функции раскодирования, смотри описание твоей библиотеки, если описания нет, то изучай ее исходники.


Наверх

Титульная страница Поиск, карта сайта Написать письмо