Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TidHTTP] Кодировка ответа сервера на загрузку файла


serg557

Вопрос

Всем приятного времени суток-столкнулся собственно с проблемой при загрузке файла на сервер ответ выдается в кодировке ISO-8859-1, которая в программе естественно не воспринимается.

TStringList *SL2= new TStringList;
SL2->Clear();
OpenDialog1->Execute();
TIdMultiPartFormDataStream *PostFile= new TIdMultiPartFormDataStream;
PostFile->Clear();
PostFile->AddFormField("FileName",ExtractFileName(OpenDialog1->FileName));
PostFile->AddFile("Filedata",OpenDialog1->FileName);
PostFile->AddFormField("Upload","Submit Query");
SL2->Text=HTTP1->Post("http://...", PostFile);
Memo1->Text=SL2->Text;
PostFile->Free();
SL2->Free();
HTTP1->Request->ContentType="application/x-www-form-urlencoded";

Отсюда два вопроса: есть ли возможность штатными средствами перекодировать ISO-8859-1 в UTF-8, или как-то изменить кодировку 

HTTP1->Request->ContentType="multipart/form-data; boundary= --";

запрос веб-браузера 

Цитата

multipart/form-data; boundary=----WebKitFormBoundarysjyKuBn6c5UVfiFL 

Запрос IdHTTP

Цитата

multipart/form-data; boundary=--------091715182418229

Пример ответа сервера

Цитата

Файл: Son.of.Sinbads.txt - ÑÑпеÑно загÑÑжен в новоÑÑÑ!

Можно конечно сделать запрос на онлайн сервис - но как -то это :lol:

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

а самому перекодировать? принимаете текст ведь

как вариант попробовать прогнать через эту функцию, поиграйтесь с указанием кодировки

function myStringToUTF8(aStr: String): string;
// uses System.NetEncoding
var
  Data: TEncoding;
  StrArray: TBytes;
begin
  Data := TEncoding.Create;
  try
    try
      StrArray := BytesOf(aStr);
      Result := StringOf(Data.Convert(Data.Default, TEncoding.UTF8, StrArray));
    except
      Result := aStr;
    end;
  finally
    FreeAndNil(Data);
  end;
end;
Ссылка на комментарий
  • 0

 

вообще в request есть поле Accept-charset

 

если его заполнить, высока вероятность ответа в нужной кодировке

Пробовал-тогда сервер вообще не отвечает

 

с TEncodingтоже пробовал -не помогло-неужели нет ничего стандартного?

Изменено пользователем serg557
Ссылка на комментарий
  • 0

 Тема закрыта, решение нашлось благодаря теме в соседней ветке. приведу весь кусок кода- может спасу кому-то день  ;)

#include <IdURI.hpp>
...
TStringList *SL2= new TStringList;
SL2->Clear();
OpenDialog1->Execute();
TIdMultiPartFormDataStream *PostFile= new TIdMultiPartFormDataStream;
PostFile->Clear();
PostFile->AddFormField("FileName",ExtractFileName(OpenDialog1->FileName));
PostFile->AddFile("Filedata",OpenDialog1->FileName);
PostFile->AddFormField("Upload","Submit Query");
SL2->Text=TIdURI::URLDecode(HTTP1->Post("http://...", PostFile));
Memo1->Text=SL2->Text;
PostFile->Free();
SL2->Free();
HTTP1->Request->ContentType="application/x-www-form-urlencoded";

изменение в 11 строке и добавление include

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...