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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2009, 01:58   #1
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию Кодировка при отправке запроса

В семерке были проблемы с принятием сообщений.
Теперь в 2010 с отправкой. Indy 10.5.5

При Post запросе в один параметр помещается русский текст, например 'Роман'.

Data.Add('name=Роман');

В итоге на сервере вижу: 'Р*оман'

Уже перепробовал функции для строк всякие, еще где-то что-то прочитал, но пока ничего не помогает.
Может есть какие-то идеи. Не у меня одного такая проблема
Voody вне форума Ответить с цитированием
Старый 16.12.2009, 02:31   #2
AquaKlaster
Delphi,Python,PHP
Форумчанин
 
Аватар для AquaKlaster
 
Регистрация: 04.04.2009
Сообщений: 138
По умолчанию

Встречал это и не раз... Это из за Unicode, здесь применить можно URL кодировку, должно помочь.
Код:
function UrlEncode(const s: string; NeedUTF8: Boolean = False): string;
var
  I: integer;
  W: UTF8String;
begin
  Result := '';
  if NeedUTF8 then
    W := UTF8Encode(S)
  else
    W := S;
  for i := 1 to Length(W) do
    case W[i] of
      '%', ' ', '&', '=', '@', '.', #13, #10, #128..#255: Result := Result + '%'
        + IntToHex(Ord(W[i]), 2);
    else
      Result := Result + W[i];
    end;
end;
AquaKlaster вне форума Ответить с цитированием
Старый 16.12.2009, 02:40   #3
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Не помогает(
сервер вообще говорит, что неверный запрос.
Voody вне форума Ответить с цитированием
Старый 16.12.2009, 03:19   #4
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

таки опять сам нашел)))
надо использовать TStringStream:

Код:
var
  ss: TStringStream;
  s,s2 : UTF8String; //Или AnsiString в зависимости от того с какой кодировкой работает сервер
begin
  IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
  ss := TStringStream.Create;
  s  :='Значение1';
  s2 :='Значение2';
  ss.WriteString('param1='+s+'&param2='+s2);
  IdHTTP1.Post('http://site.ru/',ss);
  ss.Free;
end;
Voody вне форума Ответить с цитированием
Старый 16.12.2009, 12:26   #5
AquaKlaster
Delphi,Python,PHP
Форумчанин
 
Аватар для AquaKlaster
 
Регистрация: 04.04.2009
Сообщений: 138
По умолчанию

Да если TStringStream то запрос не кодируется юникодами, а отправляется напрямую AnsiString
AquaKlaster вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка Post запроса FiskN Работа с сетью в Delphi 4 11.12.2009 01:33
ошибка при отправке D_E_N Работа с сетью в Delphi 11 01.11.2009 00:41
проблема с \n\r при отправке писмо с аттачментами termes PHP 3 27.07.2009 12:51
Формат передаваемых данных хабам локальной сети, при отправке личных сообщений из DC клиетов docm Общие вопросы .NET 0 18.11.2008 15:33
Многопоточность при отправке почты sanchopansa Работа с сетью в Delphi 4 04.10.2008 14:57