Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с кодировкой Indy 10 (delphi 2009), отправка POST'ом и кириллица... 
:(
    Опции темы
lukas
Дата 15.2.2009, 17:28 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: нет
Всего: 15



Проблемы с кодировкой в Indy 10 - Delphi 2009 встречаются очень часто.

Почему то при отправке POST данных с символами кириллицы на сервер приходят вместо рус. символов вопросы - "?". Я использую кодировку UTF-8. Как послать данные в такой же кодировке. Уже все перепробовал, может кто нибудь сталкивался с такой проблемой.


Код

  var
  tmp: TStringList;
  i: Integer;
  tmpAR2: TArrayString;
  s: String;
begin
  HashToArray(Parameters[2].ZendVariable,tmpAR);
  HashToArray(Parameters[3].ZendVariable,tmpAR2);
  tmp := TStringList.Create;

  ss := TStringStream.Create;

  for i := 0 to high(tmpAR2) do
      tmp.Add(tmpAR[i] + '=' + tmpAR2[i]);


    S := idHTTP.Post(Url,tmp);

    ReturnValue := S;

  tmp.Free;
end;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MetalFan
Дата 15.2.2009, 18:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



а знаки препинания, кроме точки, принципиально не используешь?  smile  


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
falling
Дата 26.5.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2008

Репутация: нет
Всего: нет



Та же проблема, мб кто нибудь нашел решение?
PM MAIL   Вверх
Keeper89
Дата 26.5.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



А если при загрузке приложения сразу определить кодировку?
Код

if not(Assigned(idhttp1.IOHandler)) then
  begin
    idhttp1.IOHandler:=TIdIOHandler.MakeDefaultIOHandler(idhttp1);
    idhttp1.IOHandler.DefStringEncoding:=en8Bit;
  end;


Плюс посмотрите вот это.


--------------------
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 28.7.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Похожая проблема. Все было ничего, до тех пор, пока не наткнулся на сайт в UTF-8 и не попытался отправить ему данные POSTом. 

Правильно ли я понимаю, что браузер отправляет серверу данные в той же кодировке, что и сама страница? 

Есть ли способ научить Indy передавать данные в той кодировке, в которой мне хочется в данный момент? 

D7, Indy 10.2.3

Это сообщение отредактировал(а) Borland_Delphi_6 - 28.7.2009, 14:04


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Keeper89
Дата 28.7.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



А почему не определять кодировку страницы и переключать Инди перед запросом?


--------------------
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 28.7.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Цитата(Keeper89 @  28.7.2009,  16:28 Найти цитируемый пост)
 переключать Инди перед запросом? 

Про это, пожалуйста, по-подробнее. У Indy имеется штатная возможность перекодировать данные перед отправкой запроса?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Keeper89
Дата 28.7.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



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


--------------------
PM MAIL WWW   Вверх
Romikgy
Дата 28.7.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146



имхо всетаки проблемка в том что дельфи 2009 имеет юникодный стринг.... хотя советами Keeper89 я бы не пренебрегал ...



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Borland_Delphi_6
Дата 28.7.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Keeper89, у 10-й версии нет свойства DefStringEncoding... 

В принципе, можно вручную все сконвертировать в UTF-8 до добавления полей через AddFormField(), но у меня полей этих очень много и хотелось бы найти вариант более изящный, чем конвертировать каждое поле в лоб. 


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Keeper89
Дата 29.7.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Borland_Delphi_6, оставь здесь какой-нибудь код (чтобы просто кинуть на форму) для POST'а, я попробую.


--------------------
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 29.7.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Keeper89, наковырял исходник для проверки. Текст в Edit1 отправляется без изменений, текст в Edit2 отправляется после функции UTF8Encode() и поэтому с ним все нормально.

Я компилировал в D7 и с Indy 10.2.3

Присоединённый файл ( Кол-во скачиваний: 60 )
Присоединённый файл  Encoding_Test.rar 6,51 Kb


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Keeper89
Дата 29.7.2009, 22:00 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Romikgy прав - все зависит от дефолтной кодировки компонентов, которые поддерживает Delphi (в 7 версии это ANSI, в 2009 уже Юникод). Отдельной настройки кодировки idHTTP я так и не нашел в 10-й версии.
Поэтому для семерки предлагаю решить проблему как-то так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
   Data: TIdMultiPartFormDataStream;
   PostResult:TStringList;

  procedure AddUnicodeFormData(const FieldName,
                                     FieldValue: string;
                               var XData: TIdMultiPartFormDataStream);
  begin
    XData.AddFormField(FieldName, UTF8Encode(FieldValue));
  end;

begin


  PostResult:=TStringList.Create;
  Data := TIdMultiPartFormDataStream.Create;
  AddUnicodeFormData('tit1e', Edit1.Text, Data);
  AddUnicodeFormData('body', Edit2.Text, Data);
  AddUnicodeFormData('email', '[email protected]', Data);
  AddUnicodeFormData('category_id', '10195', Data);
  AddUnicodeFormData('type', '1', Data);
  AddUnicodeFormData('type_changed', '0', Data);
  AddUnicodeFormData('image_action_1', '', Data);
  AddUnicodeFormData('captcha_image', 'sdf', Data);
  AddUnicodeFormData('contact_method', '3', Data);
  AddUnicodeFormData('tc_accept', '0', Data);
  AddUnicodeFormData('preview', '1', Data);

  PostResult.Text := Poster.Post('http://www.slando.ru/post/edit.html', Data);
  ShowMessage(Utf8ToAnsi(PostResult.Text));
  WB_LoadHTML(WebBrowser1, PostResult.Text);
end;


Это сообщение отредактировал(а) Keeper89 - 29.7.2009, 22:01


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0847 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.