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

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

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

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

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 11:38   #1
Shadow_Hawk
Новичок
Джуниор
 
Регистрация: 14.04.2009
Сообщений: 1
По умолчанию Кодировка в INDY 10 (как бороться с "???")

... Где то я не догоняю - как с этим бороться , передаю параметры в Post ...

Авторизация уже прошла и страничка БЕЗ ПАРАМЕТРОВ загружается,
на ней есть несколько полей и кнопка [Применить фильтр]
в запросе ей соответствует поле Filter.
Поля заполняю точно так же как это вижу сниффером в момент ручного заполнения полей и нажатия кнопки [Применить фильтр]
вот часть кода:

Код:
  код delphi: 
  ...
  ADDR := 'http://' + Edit1.Text;
  mpfd := TIdMultiPartFormDataStream.Create;
  ...
  mpfd.AddFormField('ENaklDateF', '');
  mpfd.AddFormField('ZStatusList', '(все)');
  mpfd.AddFormField('Filter', 'Применить фильтр');
  ...
  stream := TMemoryStream.Create;
  ...
  idhttp1.Post(ADDR,mpfd,stream);
  ...
Сниффер показывает, что я передаю (сниффер: HTTPAnalyzer Stand-alone)

Код:
... 
mpfd.AddFormField('ENaklDateF', ''); 
mpfd.AddFormField('ZStatusList', '(???)'); 
mpfd.AddFormField('Filter', '????????? ??????'); 
...
HTTPEncode, AnsiToUtf8, UTF8Encode не помогают

Как бороться с этими ВОПРОСИКАМИ , есть знатоки ??? HELP !!! Помогите плизз!!!

... Некоторые наблюдения ...
Запускаю проект и смотрю, что в итоге ушло в Post Data в соответствующей переменной
Точно так же просматриваю, что отсылает на сервер http://.../OrderList.aspx
при нажатии на кнопку [Применить фильтр]

Так вот:
если я отправляю из программы - то переменная ZStatusList = '(???)',
если запрос отправить со странички ручками - то переменная ZStatusList = '(все)' и остальные поля тоже с русскими буковками а не с вопросиками.
Вот такая неувязочка.
( ЗЫ: Причем если получать данные со странички простым GET сразу в MEMO будет таже проблема с ВОПРОСИКАМИ а если через ПОТОК то все ок. И еще - если скомпилировать проект не на 10 INDY а на старой что идет в комплекте с дистрибутивом Delphi 7 то все ОК - вижу русский и при приеме и при отправки. )
Естественно Post отрабатывается без параметров, как будто я просто первый раз зашел на страничку.
( там данный просто за последнюю неделю отображаются ).

Что посоветуете - сносить INDY 10 и вертать старую (хотя очень не хочется да и будут думаю те еще траблы с возвратом) или есть способ побороть проблему?
Shadow_Hawk вне форума Ответить с цитированием
Старый 14.09.2009, 12:12   #2
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию

У меня аналогичная проблема. Перепробовал кучу методов борьбы с кодировкой, но ничего не помогает. Юзал BDS 2006 - все норм. Перешел на CodeGear RAD 2009 - INDY начал мозги канифолить.
JoanM вне форума Ответить с цитированием
Старый 14.09.2009, 15:49   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 20,999
По умолчанию

читаем через потоки.
вот пример.
Код:
procedure Tmain_form.httpClick(Sender: TObject);
var
stream: tStream;
strings: tStringList;
begin
   stream := tMemoryStream.Create;
   try
   idHTTP1.Get('http://programmersforum.ru/showthread.php?t=60677', stream);
   stream.Position := 0;
   strings := tStringList.Create;
   strings.LoadFromStream(stream);
   memo1.Lines.Assign(strings);
   strings.Free;
   finally
   stream.Free;   
   end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.09.2009, 11:15   #4
JoanM
Дешево пишу проги)
Форумчанин Подтвердите свой е-майл
 
Аватар для JoanM
 
Регистрация: 12.12.2006
Сообщений: 106
По умолчанию

Мне нужно сообщение на мыло отправить с помощью tIDSTMP и tidMessage. И потоками не хотелось бы обходиться... Читал в королевстве дельфи, что можно поправочки в исходник внести и все будет норм, но толи у меня руки кривые, толи это просто не работает...
JoanM вне форума Ответить с цитированием
Старый 15.09.2009, 11:18   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 20,999
По умолчанию

лучше обходится потоками(не так то и трудно), ибо менять исходники(если они конечно рабочие были) дурной тон
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.09.2010, 13:40   #6
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

Тему конечно старую поднимаю, но вопрос по теме:
При приеме конечно был дан пример. Но что делать с отправкой? Что только не делал но на хост уходят "???". Пробовал через TStringStream с указанием нужной кодировки - та же история

UPD:
Все решается просто:
txt:=IdHTTP1.Get(IdHTTP1.URL.URLEnc ode('какой то адрес с русскими буквами в параметрах')):

Последний раз редактировалось TzX; 20.09.2010 в 14:05.
TzX вне форума Ответить с цитированием
Старый 20.09.2010, 14:53   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 20,999
По умолчанию

кодируйте адрес сами, ручками(функции тоже на форуме есть)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.02.2022, 16:17   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от TzX Посмотреть сообщение
UPD:
Все решается просто:
txt:=IdHTTP1.Get(IdHTTP1.URL.URLEnc ode('какой то адрес с русскими буквами в параметрах')):
Спасибо. Помог спустя 12 лет )))) Весь инет перерыл.
FaTaL вне форума Ответить с цитированием