Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2007, 23:53   #1
шолku
Пользователь
 
Регистрация: 14.12.2006
Сообщений: 20
По умолчанию Проблема с кодировкой заголовков в TIdMessage

Помогите пожалуйста!!! Я уже с ума схожу. Второй день уже бьюсь с этой проблемой.
Вот она:
Я пишу почтовый клиент. Принимаю почту я компонентом TIdPOP3.
Но зоголовки писем приходят через, простите, задницу, т. е. в koi8-r
Другими словами:

...
ShowMessage(IdMessage.From.name);
...

выводит что-то вроде:
=?KOI8-R?Q?=FB=C5=CC=CB=CF=D...

хотя должно быть имя отправителя

Что делать?
шолku : THuman;
шолku вне форума Ответить с цитированием
Старый 26.01.2007, 00:26   #2
Speeker
Форумчанин
 
Аватар для Speeker
 
Регистрация: 01.12.2006
Сообщений: 241
По умолчанию

попробуй сначала переводить текст с одной кодировки в другую.
инфа по кои * R тут:
http://ru.wikipedia.org/wiki/KOI8-R
Програмисты - единственные люди, которым платят за исправления их же ошибок

Последний раз редактировалось Speeker; 26.01.2007 в 02:17.
Speeker вне форума Ответить с цитированием
Старый 26.01.2007, 09:21   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

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

function WinToKoi(Str: string): string;
var
  i, j, index: Integer;
begin
  Result := '';

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

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

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

  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;
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.01.2007, 11:58   #4
шолku
Пользователь
 
Регистрация: 14.12.2006
Сообщений: 20
По умолчанию

Блин, проблема решена лишь отчасти.
Тело письма теперь отображается нормально(твоя функция работает).
НО!

Заголовки всё равно остаются прежними, потому что твоя функция конвертирует текст типа "ФЕМП УППВЭЕОЙС" а не "=?KOI8-R?Q?=FB=C5=CC=CB=CF=D..."

Так что продолжаем мне помогать и высказывать способы решения)))
шолku : THuman;
шолku вне форума Ответить с цитированием
Старый 26.01.2007, 12:02   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Старая проблема, решается ручным составлением заголовка:

mes.AddHeader('Date: '+formatdatetime('ddd, d mmm yyyy hh:nn:ss',now,loc)+' +0400');
mes.AddHeader('From: <от кого>');
mes.AddHeader('To: <кому>');
mes.AddHeader('Subject: текст заголовка');
mes.AddHeader('Content-Type: text/html; charset= "windows-1251"');
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.01.2007, 12:10   #6
шолku
Пользователь
 
Регистрация: 14.12.2006
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Старая проблема, решается ручным составлением заголовка:

mes.AddHeader('Date: '+formatdatetime('ddd, d mmm yyyy hh:nn:ss',now,loc)+' +0400');
mes.AddHeader('From: <от кого>');
mes.AddHeader('To: <кому>');
mes.AddHeader('Subject: текст заголовка');
mes.AddHeader('Content-Type: text/html; charset= "windows-1251"');
Этот код нужно применять при составлении письма! А я принимаю уже готовое письмо с сервака! Я не отправляю, я принимаю!
шолku : THuman;
шолku вне форума Ответить с цитированием
Старый 06.09.2008, 06:43   #7
artemxxl
Новичок
Джуниор
 
Регистрация: 16.07.2008
Сообщений: 1
По умолчанию

Используй компонент IdDecoderQuotedPrintable
label4.Caption:=IdDecoderQuotedPrin table1.DecodeString (IdMessage.Subject);
а затем прогоняй то что получилось через koitowin
label4.Caption:=KoiToWin(Label4.Cap tion);
остается отсечь лишние символы что вначале "?koi8-r?Q?" порстым copy с 11го символа
ну и заменить все "_" пробелом и срезать несколько символов в конце строки.
и опа - мы получили нормальный заголовок
artemxxl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rave Reports.Проблема с кодировкой McKane БД в Delphi 8 14.02.2011 09:49
Проблема с кодировкой и mail.ru! dada PHP 2 08.07.2008 03:08
Дельфи 8. Проблема с кодировкой. Venor Общие вопросы Delphi 1 10.06.2008 20:44
Определение цвета и размера заголовков окон VDLab Win Api 2 28.12.2006 17:24