С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
2 / 2 / 0
Регистрация: 01.03.2010
Сообщений: 46

Неверная кодировка текста в компонентах формы при получении почты через IdPOP3

27.12.2011, 00:49. Показов 4306. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача состоит в том, что бы написать некое подобие почтового клиента, который только загружает письма через через POP3 - протокол и выводит ихв StringGrid.
Проблема заключается в том, что письма в основном приходят в UTF-8 и Koi8-r. В большенстве своем в Koi8-r. Так вот темы тех, что приходят в КОИ8 в ячейках StringGrid'а отображаются в виде кракозябры, сам текст может отображаться нормально, а может тоже в кракозябре.
Те, что приходят в UTF-8 отображаются полностью нормально.

Выглядит это все примерно так:
 Комментарий модератора 
[IMG]Для вложений используйте возможности форума[/IMG]


Код писема:

в Koi8-r:
1
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Return-Path: <reciprocatedl4@ya.ru>
Received: from ras.beamtele.net (ras.beamtele.net [183.83.7.34] (may be forged))
    by relay1.relcom.ru (8.14.4/8.14.4) with ESMTP id pBQCv4Ro016779
    for <iamjustsendingthisleter@flysafety.msk.ru>; Mon, 26 Dec 2011 15:57:05 +0300 (MSK)
    (envelope-from reciprocatedl4@ya.ru)
To: "iamjustsendingthisleter" <iamjustsendingthisleter@flysafety.msk.ru>
Date: Mon, 26 Dec 2011 15:56:03 +0400
From: "reciprocatedl4@ya.ru" <reciprocatedl4@ya.ru>
Subject: =?KOI8-R?B?8+/65OHk6e0g8+Hq9CDw7+Qg6+zg/iD38+Xn7w==?= 4500,
 =?KOI8-R?B?4evj6fE=?=
Reply-To: reciprocatedl4@ya.ru
Message-Id: <C3MO13COEC3LC4ZKZ@localhost.localdomain>
X-Mailer: 
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=koi8-r
X-Greylist: Recipient e-mail whitelisted, not delayed by milter-greylist-4.2.6 (relay1.relcom.ru [194.58.66.62]); Mon, 26 Dec 2011 15:57:05 +0300 (MSK)
In-Reply-To: <C3MO13COEC3LC4ZKZ@localhost.localdomain>
 
уПЪДБОЙЕ УБКФПЧ РПД ЛМАЮ ПФ 4500 ТХВ. - ФБЛПЕ ЧПЪНПЦОП ФПМШЛП РПД оПЧЩК ЗПД!
 
рТБКУ-МЙУФ:
 
    чЙЪЙФЛБ нЙОЙ – 4500 ТХВ.
    чЙЪЙФЛБ нБЛУЙ – 9500 ТХВ.
    йОФЕТОЕФ ЛБФБМПЗ – 15000 ТХВ.
    йОФЕТОЕФ НБЗБЪЙО – 20000 ТХВ.
 
чУЕ УБКФЩ ХУФБОБЧМЙЧБАФУС ОБ CMS (УЙУФЕНХ ХРТБЧМЕОЙС УБКФПН), ЮЕТЕЪ ЛПФПТХА чЩ УНПЦЕФЕ ДПВБЧМСФШ / НЕОСФШ ЧУА ЙОЖПТНБГЙА
 
чбцопе пфмйюйе! убкф УПЪДБЕФУС РПМОПУФША рпд лмаю, чБН ОЙЮЕЗП ОЕ ОХЦОП ДЕМБФШ УБНПУФПСФЕМШОП.
 
ч УФПЙНПУФШ ХЦЕ члмаюео дпнео об зпд Ч ЪПОЕ ТХ. (ТЕЗЙУФТЙТХЕФУС УТБЪХ ОБ чБЫЙ ДБООЩЕ) Й ипуфйоз об рпм зпдб
 
Ф.П. чЩ РПМХЮБЕФЕ рпмопуфша зпфпчщк убкф ЛПФПТЩК УТБЪХ ВХДЕФ тбънеэео ч йофетоеф, ЧУЕ ТБВПФЩ ДЕМБАФУС ОБНЙ, чЩ ФПМШЛП РПМХЮБЕФЕ ХЦЕ РПДЗПФПЧМЕООЩК РПД чБУ УБКФ. чБН ЧЩДБАФУС ЧУЕ РБТПМЙ
 
юФП ЧЛМАЮБЕФ ВБЪПЧБС ЛПНРМЕЛФБГЙС Ч ФБТЙЖБИ:
 
    - хОЙЛБМШОЩК (ЧУЕ ФБТЙЖЩ ПФ ЧЙЪЙФЛБ НБЛУЙ) ЙМЙ ФЙРПЧПК ДЙЪБКО (ЧЙЪЙФЛБ - НЙОЙ)
    - оЕПЗТБОЙЮЕООПЕ ЛПМЙЮЕУФЧП УФТБОЙГ
    - жПТНБ ПВТБФОПК УЧСЪЙ
    - лПТРПТБФЙЧОБС РПЮФБ
    - дПНЕО Й ИПУФЙОЗ Ч РПДБТПЛ
    - уЙУФЕНБ ХРТБЧМЕОЙС УБКФПН
        дМС ЙОФЕТОЕФ-НБЗБЪЙОПЧ ДПРПМОЙФЕМШОП:
    - лБФБМПЗ ФПЧБТПЧ
    - лПТЪЙОБ ЪБЛБЪПЧ
   
дПРПМОЙФЕМШОЩК ПРГЙПОБМШОЩК ЖХОЛГЙПОБМ:
    - жПТНБ ПВТБФОПК УЧСЪЙ
    - мЕОФБ ОПЧПУФЕК
    - жПФПЗБМЕТЕС
    - жПФПУМБКДЕТ
    - уМПЦОБС ЖПТНБ ЪБЛБЪБ
    - зПУФЕЧБС ЛОЙЗБ
    - бХДЙП/ЧЙДЕП РМЕЕТ
    - нХМШФЙСЪЩЮОПУФШ
    - йОЖПТНЕТЩ
    + ЧПЪНПЦОЩ МАВЩЕ ДПРПМОЕОЙС ВЕЪ ПЗТБОЙЮЕОЙС ХТПЧОС УМПЦОПУФЙ
 
ретчще 20 рпъчпойчыйи РПМХЮБФ РПДБТЛЙ ОБ 1500 ТХВ!
 
ъчпойфе ртснп уекюбу (495) 638-54-70  (НОПЗПЛБОБМШОЩК), 8-800-555-77-05 (ЙЪ тПУУЙЙ - ВЕУРМБФОП)
Пробовал брать символы кракозябры и делать следующее: ShowMessage(int('символ кракозябры'));
Получал код 63. Любой из символов кракозябры выдает код 63, что соответствует коду знака '?', но символы кракозябры все выглядят по разному, а код один и тот же: 63
Не понимаю как так выходит, т.к. с кодировками плохо знаком, перерыл кучу форумов и других сайтов, но ничего путного не нашел.

Пишу на C++ Builder XE
ОС: Windows XP Professional SP3

Как сделать так, что бы кодировка отображалась нормально. Кто сталкивался, подскажите, пожалуйста конкретными примерами.

Заранее всем огромное спасибо!
Миниатюры
Неверная кодировка текста в компонентах формы при получении почты через IdPOP3  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.12.2011, 00:49
Ответы с готовыми решениями:

IdPOP3. Проверка почты на mail.ru. Неверная кодировка текста.
Пишу код: //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject...

Неверная кодировка при получении кода страницы через IdHTTP
Здравствуйте! Нужна ваша помощь в решении проблемы. ПРоблема состоит в том, что при получении кода страницы через IdHTTP код отображается...

Idpop3 - неверная кодировка
Такая проблема. Принимаю сообщения с почты яндекса, тема письма передаётся нормально, а само письмо - набор символов (Вопросы и буква N). ...

5
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
27.12.2011, 07:58
Где-то откопал для KOI8->1251 и обратно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
AnsiString WinToKoi(const AnsiString St)
{
 char Win_KoiChars[] = {
      128,129,130,131,132,133,134,135,136,137,060,139,140,141,142,143,
      144,145,146,147,148,169,150,151,152,153,154,062,176,157,183,159,
      160,246,247,074,164,231,166,167,179,169,180,060,172,173,174,183,
      156,177,073,105,199,181,182,158,163,191,164,062,106,189,190,167,
      225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
      242,243,244,245,230,232,227,254,251,253,154,249,248,252,224,241,
      193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
      210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
 AnsiString Result=St;
 for (int i = 1; i <= St.Length(); i++)
 {
  if (int(St[i]) > 127)
    Result[i] = Win_KoiChars[St[i]];
 }
 return Result;
}
 
//---------------------------------------------------------------------------
AnsiString KoiToWin(const AnsiString St)
{
 char Koi_WinChars[] = {
      128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
      144,145,146,147,148,149,150,151,152,153,218,155,176,157,183,159,
      160,161,162,184,186,165,166,191,168,169,170,171,172,173,174,175,
      156,177,178,168,170,181,182,175,184,185,186,187,188,189,190,185,
      254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
      239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
      222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
      207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
 AnsiString Result = St;
 for (int i = 1; i <= St.Length(); i++)
 {
  if (int(St[i]) > 127)
    Result[i] = Koi_WinChars[St[i]];
 }
 return Result;
}
0
2 / 2 / 0
Регистрация: 01.03.2010
Сообщений: 46
27.12.2011, 13:14  [ТС]
Тоже самое. Я не понимаю, как именно декодировать, потому что уже на выходе при обращении к IdMessage1->Subject получаю кракозябру, что эквивалентно знакам вопроса. То есть уже поздно декодировать, а раньше как, не понимаю
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 19:01
Проблема в ContentTransferEncoding = L"base64"; проверял на RAD2009

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TIdSMTP *IdSMTP = new TIdSMTP(NULL);
TIdMessage *Msg = new TIdMessage(IdSMTP);
  Msg->Subject = WinToWin1251Q(L"Тестовое письмо");  // WinToWin1251Q - самописная
  Msg->ContentTransferEncoding = L"base64";          // вот она, чудо строчка
 
  Msg->From->Name = WinToWin1251Q(L"Тестер");
  Msg->ContentType = L"text/plain; charset=windows-1251";
  Msg->Body->Add(L"Тело сообщения");
...
  IdSMTP->Connect();
  IdSMTP->Send(Msg);
  IdSMTP->Disconnect();
...
}
//---------------------------------------------------------------------------
UnicodeString __fastcall WinToWin1251Q(UnicodeString Str)
{
UnicodeString strTo;
  strTo.sprintf(L"=?windows-1251?Q?");
AnsiString sss = Str;
  for(int i=1; i<=sss.Length(); i++)
  {
byte a = sss[i];
    if (a == ' ') a = '_';
    strTo.cat_printf((a<128) ? L"%c" : L"=%.2X", a);
  }
  strTo.cat_printf(L"?=");
  return strTo;
}
Нашел на другом форуме
0
26 / 26 / 3
Регистрация: 13.04.2012
Сообщений: 61
13.04.2012, 15:11
Всё бы ничего, но борланд использует кодировку не 1251, а 1252...

Добавлено через 13 минут
Только что заметил одну особенность.
Создаем форму, помещаенм на неё Edit1 и Edit2.
В свойствах Edit1->Text пишем что-нить по-английски, свойствах Edit2->Text по-русски.
Запускаем программу.
Скопировав из Edit1 текст в буфер и вставив его в другое приложение, (браузер или блокнот) английский текст отбражается нормально.
Проделав это с Edit2 - получаем крякозябры.
НО! Написав в Edit1 по-русски и скопировав в буфер, вставляется текст в нормальной кодировке!
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.04.2012, 16:13
борланд??? так я про RAD

Добавлено через 26 минут
windows-1251 это обвертка, как я понимаю, а внутри преобразование в base64

Добавлено через 28 минут
Вопрос как получить исходный код письма, как тот что привел Fastex в начале темы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2012, 16:13
Помогаю со студенческими работами здесь

Неверная кодировка текста при выводе из файла на страницу
Здравствуйте.Столкнулся с проблемой кодировки текста загруженного из текстового файла на страницу.Появилось то, что показано на скрине.Как...

Неверная кодировка при отображении текста в магазине приложений
Вообщем вот:

Неверная кодировка при отправке текста буфера обмена на почту
копирую русский текст в буфер с отправкой на почту - приходят вопросительные знаки. что не так?

Ошибка при проверке почты средствами IdPOP3 и SSL
HELP! Приложение для проверки почты через IdPOP3 изначально не коннектилось с сервером, затем выяснилось что нужно использовать SSL....

Неверная кодировка текста
Доброго дня! Сделал вывод русского текста из таблицы phpmyadmin, но на выходе получились знаки вопроса. Подскажите, в чем может быть дело,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru