![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Привет, у меня возникла банальная, но в то же время распространенная проблема, которая, как оказалась, не имеет универсального решения. Суть проблемы в том, что я перевел свой проект Global Mail Sender с D7 + Indy 10 на D2009 и у меня возникли проблемы с кодировкой, приходят кракозябры, от которых я избавился на D7 + Indy 10 с использованием следующего трюка:
Код:
procedure TForm1.IdMessageInitializeISO(var VHeaderEncoding: Char; var VCharSet: string); begin VCharSet := 'windows-1251';// end; но, видимо, Indy 10, встроенный в D2009 отличается значительнее, чем мне казалось, и теперь данный трюк не помогает, может кто знает как отправить письмо, чтобы его можно было нормально прочесть ? |
|
#2
|
|||
|
|||
|
Вроде, в 2009 строки уже юникодные. Тогда:
1. Попробовать указать UTF-8, UTF-16 или Unicode. 2. Принудительно перекодировать строки в Ansi. |
|
#3
|
||||
|
||||
|
Некоторое время назад тоже бился с кодировкой под Indy, как оказалось в случае если имеется вложение к письму, то чихать хотел Indy на предустановки кодировки. Решения этой проблемы я так и ненашел.
А вот ваш вариант интересен, такого я непробовал. |
|
#4
|
||||
|
||||
|
Цитата:
1. Пробовал, некатит 2. Тоже пробовал, опять же некатит, хотя побьсь еще над этим Возможно, упустил какой-нибудь нюансик, но какой ? |
|
#5
|
|||
|
|||
|
Например тот, что String теперь - это Unicode-строка.
Надо, возможно, принудительно указывать тип AnsiString. |
|
#6
|
||||
|
||||
|
Цитата:
Ага, пасиб, все возможно, пересмотрю проект ![]() |
|
#7
|
||||
|
||||
|
Цитата:
Не помогло, Delphi "говорит" также что AnsiString это и есть String или наоборот. A вот разница м/у Pchar и PAnsiChar действительно здесь существунная. |
|
#8
|
|||
|
|||
|
Доброго времени суток!
Сам морочился очень досго с подобной проблемой в Д2006 перерыл кучу информации и пришел к правильному решению: Суть - нужно каждой части письма указывать в какой она кодировке должна быть. пример : Код:
//есть письмо
IdMessageAvto : TidMessage;
//содержимое:
MessBody : TidText;
//вложение :
Attach : TIdattachmentFile;
.......
// устанавливаем параметры письма
with IdMessageAvto do
begin
ContentType := 'multipart/mixed';
CharSet := 'windows-1251';
.................
end;
присоединяем содержимое :
MessBody := TIdText.Create(IdMessageAvto.MessageParts, nil);
MessBody.ContentType := 'text/plain; CharSet = windows-1251';
// чарсет нужно указывать именно в свойстве контенттайп по другоу не канает (проверено)
MessBody.Body.Text := ' message ';
Attach := TIdAttachmentFile.Create(IdMessageAvto.MessageParts,'D:\file.txt'); |
|
#9
|
||||
|
||||
|
К сожалению не помогло, 2009 Delphi от 2006 отличается значительно
![]() |