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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> idHttp.post возвращает ????? знаки вопросов 
V
    Опции темы
Akella
  Дата 23.9.2011, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



D2007, Indy 10.5.8

Код примерно такой:
Код

Var
 idHttp: TidHttp;
 data: TStringList;
 DestEncoding: TIdTextEncoding;
 a1: string;
begin 
    DestEncoding := TIdTextEncoding.UTF8;
    data := TStringList.Create;
    idHttp := TidHttp.Create(application);

... 

        data.Add('$code_page='+code_page);
        data.Add('$login='+...);
        data.Add('$passw='+...);
        data.Add('$status=approved');//status=approved
        data.Add('$method=confirm');
        data.Add('$table_name=apart');

  a1 := IdHTTP.Post(URL, data, DestEncoding);


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

Вот такое: phones_list=8787878787(????);555555(????????);80973232756(????);7178823(????????);
В скобках должны быть имена на русском.

Как получить юникод вместо ?????


/// На сервере самописная процедура на php, которая обрабатывает мой запрос и отдает мне ответ. Да, там можно отдавать ответ уже в нужной кодировке. Но хочется получать именно в юникоде.
P.S. Мышки плакали, кололись, но продолжали есть кактус.
PM MAIL   Вверх
MetalFan
Дата 23.9.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



1. что кажет http отладчик?
2. отладка индей поможет)


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


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



минуту назад решил вопрос 

Нашёл процедуру с возможностью получения ответа в качестве потока smile
Код

DestEncoding: TIdTextEncoding;
m1: TStringStream;
DestEncoding := TIdTextEncoding.UTF8;


IdHTTP.Post(URL, data, m1, DestEncoding, DestEncoding);



теперь m1.DataString содержит нужные текстовые юникодные данные с правильной кириллицей.

Добавлено @ 14:28
Но я считаю, что это очередной баг инди
PM MAIL   Вверх
iwpwork
Дата 26.3.2013, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ищите ответы на нормальных буржуйских форумах, а не на наших, где кроме как троллить - ничего не умеют.

var
  ds: TIdMultipartFormDataStream;
begin
  ds := TIdMultipartFormDataStream.Create;
  try
    ds.AddFormField('test', UTF8Encode('äöüß'), 'utf-8').ContentTransfer := '8bit';
    try
      ShowMessage(HTTP.Post('http://localhost/test.php', ds));
    except
    end;
  finally
    FreeAndNil(ds);
  end;
end;
PM MAIL   Вверх
Akella
Дата 26.3.2013, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(iwpwork @  26.3.2013,  13:29 Найти цитируемый пост)
UTF8Encode('äöüß'),

лучше заменить на правильную функцию
у меня был случай, когда на страничке были неюникодные символы и UTF8Encode возвращала просто пустоту


UTF8 to string
Код

function UTF8ToStrSmart(Value: String): String;


      function UTF8ToStr(Value: String): String;
      var
        buffer: Pointer;
        BufLen: LongWord;
      begin
        BufLen := Length(Value) + 4;
        GetMem(buffer, BufLen);
        FillChar(buffer^, BufLen, 0);
        MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
        Result := WideCharToString(buffer);
        FreeMem(buffer, BufLen);
      end;


var
  Digit: String;
  i: integer;
  HByte: Byte;
  Len: Byte;
begin
  Result := '';
  Len := 0;
  if Value = '' then Exit;
  for i := 1 to Length(Value) do
  begin
    if Len > 0 then
    begin
      Digit := Digit + Value[i];
      Dec(Len);
      if Len = 0 then
        Result := Result + UTF8ToStr(Digit);
    end else
    begin
      HByte := Ord(Value[i]);
      if HByte in [$00..$7f] then       //Standart ASCII chars
        Result := Result + Value[i]
      else begin
        //Get length of UTF-8 char
        if HByte and $FC = $FC then
          Len := 6
        else if HByte and $F8 = $F8 then
          Len := 5
        else if HByte and $F0 = $F0 then
          Len := 4
        else if HByte and $E0 = $E0 then
          Len := 3
        else if HByte and $C0 = $C0 then
          Len := 2
        else begin
          Result := Result + Value[i];
          Continue;
        end;
        Dec(Len);
        Digit := Value[i];
      end;
    end;
  end;
end;



Добавлено @ 14:08
iwpwork, советую к прочтению http://forum.vingrad.ru/forum/topic-353769.html

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

Запрещено:

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

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

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

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

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


 




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


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

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