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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 03:10   #1
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию Кодировка idmultipartformdatastream в Delphi 2009

Код:
var ...
multi: Tidmultipartformdatastream; 
...
multi.AddFormField('fullname', fullname);
файлик закачивается, все нормально работает, проблемы только в том то из fullname выпадает кириллица... из Slovo_Слово_Slovo остается Slovo__Slovo

Отправка идет на страницу с кодировкой windows-1251
Viteef вне форума Ответить с цитированием
Старый 16.05.2009, 09:56   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Попробуй сделать так:
Код:
uses IdIOHandler,idglobal;

procedure form1.oncreate (sender:Tobject);
begin
if not(Assigned(idhttp1.IOHandler)) then
  begin
    idhttp1.IOHandler:=TIdIOHandler.MakeDefaultIOHandler(idhttp1);
    idhttp1.IOHandler.DefStringEncoding:=en8Bit;
  end;
end;
Смысл в том, чтобы при создании формы создать для IdHTTP IOHandler по- умолчанию и выставить ему кодировку UTF8. Ибо изначально используется ASCII.
Код:
procedure TIdIOHandler.InitComponent;
begin
  inherited InitComponent;
  FRecvBufferSize := GRecvBufferSizeDefault;
  FSendBufferSize := GSendBufferSizeDefault;
  FMaxLineLength := IdMaxLineLengthDefault;
  FMaxCapturedLines := Id_IOHandler_MaxCapturedLines;
  FLargeStream := False;
  FReadTimeOut := IdTimeoutDefault;
  FInputBuffer := TIdBuffer.Create(BufferRemoveNotify);
  FDefStringEncoding := TIdTextEncoding.ASCII;
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 16.05.2009, 12:54   #3
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Не помогло. У меня так

Код:
procedure TIdIOHandler.InitComponent;
begin
  inherited InitComponent;
  FRecvBufferSize := GRecvBufferSizeDefault;
  FSendBufferSize := GSendBufferSizeDefault;
  FMaxLineLength := IdMaxLineLengthDefault;
  FMaxCapturedLines := Id_IOHandler_MaxCapturedLines;
  FLargeStream := False;
  FReadTimeOut := IdTimeoutDefault;
  FInputBuffer := TIdBuffer.Create(BufferRemoveNotify);
  DefStringEncoding := Id_IOHandler_DefEncoding;
end;
Indy 10, но не с последними обновлениями.

Последний раз редактировалось Viteef; 16.05.2009 в 14:09.
Viteef вне форума Ответить с цитированием
Старый 16.05.2009, 16:24   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

https://forums.codegear.com/thread.j...6821&tstart=15
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 17.05.2009, 17:41   #5
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Смотрел на этот пример

Код:
var
  s: UTFString;
  strm: TMemoryStream;
begin
  s := Edit1.Text;
  strm := TMemoryStream.Create;
  try
    if s <> '' then strm.Write(s[1], Length(s));
    data.AddObject('name', 'text/plain; charset=utf-8', strm);
    ...
    IdHTTP1.Post(..., data);
  finally
    strm.Free;
  end;
end;
Во-первх D выдала Undeclared identifier: 'UtfString'

если делать так
Код:
procedure StreamWriteStr(var ms: TMemoryStream; s: string);
begin
  ms.Write(s[1], Length(s));
end;

procedure StreamWriteLn(var ms: TMemoryStream; s: string);
begin
  StreamWriteStr(ms, s + #13#10);
end;

...
...

    StreamWriteLn(strm, 'method=post');
    StreamWriteLn(strm, 'email='+email);
    StreamWriteLn(strm, 'fullname='+fullname);
    StreamWriteLn(strm, 'land='+land);
    StreamWriteLn(strm, 'icq='+icq);
    StreamWriteLn(strm, 'altpass='+login_pass);
    StreamWriteLn(strm, 'password1='+new_pass);
    StreamWriteLn(strm, 'password2='+new_pass);
    StreamWriteLn(strm, 'allowed_ip='+ip);
    StreamWriteLn(strm, 'info=');
    StreamWriteLn(strm, 'signature='+signature);
    StreamWriteLn(strm, 'submit');
    StreamWriteLn(strm, 'submit=submit');
    StreamWriteLn(strm, 'doaction=adduserinfo');
    StreamWriteLn(strm, 'dle_allow_hash='+GetHash('http://'+url+'/user/'+login));

multi.AddObject('name', 'text/plain; charset=utf-8', strm);
...
то отправляется вот что



Параметры через букву разделенные ||. Помойму неправильно в стрим записываю.

Последний раз редактировалось Viteef; 17.05.2009 в 17:46.
Viteef вне форума Ответить с цитированием
Старый 17.05.2009, 18:24   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Во-первх D выдала Undeclared identifier: 'UtfString'
Если я не ошибаюсь, то чтобы не было этой ошибки нужно объявить тип.
Код:
Type
UTFString = Type String;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 19.05.2009, 08:10   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Viteef, если не решил, скинь проект, попробую посомтреть
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.05.2009, 10:25   #8
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

Пароль от архива в репу написал. Спасибо
Вложения
Тип файла: zip DLE_Pass_Changer.zip (19.4 Кб, 11 просмотров)
Viteef вне форума Ответить с цитированием
Старый 19.05.2009, 10:50   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Чот у тебя там совсем мясо, можешь сделать просто небольшой примерчико только с мультипартом ? а то я пока разберусь где что нужно разкомментить, кучу новых багов всплывет )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.05.2009, 11:04   #10
Viteef
stopfake.org
Участник клуба
 
Регистрация: 03.05.2007
Сообщений: 1,927
По умолчанию

да, можно
Viteef вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ActiveX в Delphi 2009 euronymous Общие вопросы Delphi 2 10.05.2009 15:11
Delphi 2009 и ADO Хитрец БД в Delphi 2 07.02.2009 12:12
Кодировка Клавиатуры в delphi Neymexa Помощь студентам 2 30.12.2008 19:55