Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Кодировка.


Автор: PsiMagistr 30.7.2010, 11:44
Ребята, пытаюсь прикрутить почтовые функции. Все работает и письма отсылает. Но с кодировкою  - жесть-беда: Инглиш - норма, русский - знаки вопроса и все тебе тут. Весь форум излазил. Все перепробовал.

Дельфи 2009.

Три сетевых обьекта на форме Msg (TIdMesage), Smtp(TIdSmtp), IdAntiFreeze1 (TIdAntiFreeze) (Кстати чем он занимается этот антифриз?)

Код такой:

Код

procedure TS.Button1Click(Sender: TObject);
begin
SMtp.Host := 'smtp.inbox.ru';
Smtp.Port := 25;
smtp.Username := 'Login';
smtp.Password := 'Parol';
msg.From.Text := '[email protected]';
msg.Recipients.EMailAddresses := '[email protected]';
msg.Subject := 'Тестовое';
msg.CharSet := 'windows-1251';
msg.Body.Text := m.Text;
Smtp.Connect;
if Smtp.Connected  then
Begin
Smtp.Send(msg);
Smtp.Disconnect;
End;
end;

Автор: Snowy 30.7.2010, 12:30
Антифриз занимается тем, что не даёт приложению замирать во время работы Indy.
А с кодировкой - всё нормально. Просто ты её не устанавливаешь, зато говоришь почтовой программе, что у тебя вин-1251, хотя это не так.

Автор: PsiMagistr 30.7.2010, 12:39
А как ее установить то?.  Я то думал:

msg.CharSet := 'windows-1251'; //Увы. Оказалось не то.

Автор: Snowy 30.7.2010, 12:54
Этой строкой ты только указываешь, какая у тебя Body.Text кодировка.
А там у тебя UTF-16.
пропиши у IdSMTP
.IOHandler.DefStringEncoding := TEncoding.нужная_кодировка;

Автор: PsiMagistr 30.7.2010, 13:04
УВы. Ошибка несовпадения типов.

[DCC Error] Unit1.pas(38): E2010 Incompatible types: 'TIdEncoding' and 'TEncoding'

Автор: Snowy 30.7.2010, 13:25
Цитата(PsiMagistr @  30.7.2010,  13:04 Найти цитируемый пост)
Incompatible types: 'TIdEncoding' and 'TEncoding'
Ну и что из этого следует?
Что я пропустил буковки Id в слове TIdEncoding smile 

Автор: PsiMagistr 30.7.2010, 13:33
Нет, уважаемый Snowy в данном случае из этого следует кое что другое. Поскольку о существовании TIdEncoding' мой Дельфи вообще не подозревает... При попытке  записать:

smtp.IOHandler.DefStringEncoding  := TIdEncoding.та-та-та-та;

Он реагирует на TIdEncoding как на нечто инопланетное. (подчеркивает красным)



Автор: CodeMonkey 30.7.2010, 13:54
Цитата(PsiMagistr @  30.7.2010,  14:33 Найти цитируемый пост)
Поскольку о существовании TIdEncoding' мой Дельфи вообще не подозревает...

А кто ж тогда пишет "Incompatible types: 'TIdEncoding'"? smile

...из чего следует, что надо запустить поиск текста "TIdEncoding =" в *.pas файлах папки Indy и добавить найденный модуль в uses.

Автор: PsiMagistr 30.7.2010, 14:41
Никак не найду модуль, ребята. Пожалуйста, если не трудно, подскажите конкретно, что подключить надо? 3й день вожусь, а тут еще жара. Заранее благодарен.

Автор: CodeMonkey 30.7.2010, 14:46
Не могу сказать за Delphi 2009, но в Delphi 2010 свойство DefStringEncoding имеет тип TIdTextEncoding, который объявлен в IdGlobal.

Автор: PsiMagistr 30.7.2010, 15:39
Добавил модуль, записал, smtp.IOHandler.DefStringEncoding  := TIdEncoding.enUTF8;

TIdEncoding.enUTF8 был нормально обнаружен.

Запустил проект. При отправке ошибка и все тут.

Автор: CodeMonkey 30.7.2010, 17:16
Вроде Showy говорил, что надо UTF-16, а не UTF-8?

Я не очень разбираюсь в Indy, но когда последний раз я туда нырял, оказалось, что там что-то сильно понаворотили в связи с переходом на Unicode. Возможно, нужно искать решение, а может это баг (и надо обновить Indy), а ещё можно использовать другую библиотеку - к примеру, Synapse.

Добавлено через 1 минуту и 58 секунд
Для Synapse ссылочки:
http://www.webdelphi.ru/2010/02/synapse-otpravka-pisem-ispolzuya-smtp/
http://www.webdelphi.ru/2010/03/synapse-v-delphi-otpravka-pisem-s-vlozheniyami/
http://www.webdelphi.ru/2010/07/otpravka-pisem-s-gmail-s-ispolzovaniem-synapse/
http://www.webdelphi.ru/2010/07/gmail-synapse-i-ms-outlook-problema-s-kodirovkami-pisem-reshena/

Автор: PsiMagistr 30.7.2010, 17:34
Спасибо Вам большое CodeMonkey. Честно говоря, не знаю что и думать, хотя проблемы с Инди предвидел, там багов целый воз.

Автор: ZBugz 7.5.2015, 21:00
Всем привет... 
А вот в delphi XE8 ну никак не могу прикрутить  TIdEncoding.enUTF8
Не могу анйти где он обьявлен.. Помогите найти uses...

Автор: ZBugz 9.5.2015, 07:43
Что ? Никто не знает ?

Автор: ZBugz 18.5.2015, 07:31
Фигово, что никто не знает... smile 

Автор: Illusion Dolphin 18.5.2015, 09:52
Цитата

Фигово, что никто не знает... smile  

Вы бы пример кода дали чтоли зачем он вам нужен. 
Цитата

 TIdEncoding.enUTF8

Странно звучит - английский юникод. Я бы ещё понял? если бы вы искали TIdEncoding.UTF8 . В делфи XE7 используется IIdTextEncoding и для получению UTF8 я вызываю функцию IndyTextEncoding_UTF8 (idGlobal) - проверьте в XE8 - они навряд ли что-то поменяли.

Автор: Poseidon 18.5.2015, 13:12
ZBugz, почему бы просто самому не объевить?

Код

TIdEncoding = (
  enDefault,
  enANSI,
  enUTF8
);

http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=TIdEncoding.html

Добавлено через 1 минуту и 4 секунды
Цитата(Illusion Dolphin @  18.5.2015,  09:52 Найти цитируемый пост)
Странно звучит - английский юникод.
Эта "en" не от English, а от Encoding smile

Автор: ZBugz 26.6.2015, 17:55
Цитата(Illusion Dolphin @ 18.5.2015,  09:52)
Цитата

Фигово, что никто не знает... smile  

Вы бы пример кода дали чтоли зачем он вам нужен. 

Все времени небыло отписатся smile 

Нужно на ftp закачать файл, с русскими символами, вот и все smile 
Закачиваю обычно через idftp компонент
Код

F.Put(откуда, куда false);

И вот это
Код

 F.IOHandler.DefStringEncoding:=IndyTextEncoding_UTF8;

тоже не пашет  smile 

Есть какие мысли ? smile

Добавлено через 1 минуту и 28 секунд
С ICS все нормально работает
С Clever IS тоже не пашет...

Автор: ZBugz 18.8.2015, 21:31
Ну где все гуру ? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)