Я новичок в HTTP. У меня есть несколько HTTP GET, которые возвращают текст, закодированный в ANSI или UTF-8. Есть ли способ определить, что возвращается, чтобы я мог обрабатывать преобразование в методе, а не делать испытания и жестко кодировать необходимые преобразования для каждого? или если это может обрабатывать сам Инди?Как определить кодировку данных ответа в TIdHTTP?
Вот что я использую GET:
Основной метод
procedure TIdHTTPHelper.SendGet
(const AURL : String;
var AResponse: TMemoryStream);
begin
Request.ContentType := '';
Request.ContentLength := -1;
Get (AURL, AResponse);
AResponse.Position := 0;
end;
перегруженный метод для струнных
procedure TIdHTTPHelper.SendGet
(const AURL : String;
var AResponse: String);
var
Response : TMemoryStream;
begin
Response := TMemoryStream.Create;
SendGet (AURL, Response);
SetLength (AResponse, Response.Size div 2);
Response.Read (AResponse [1], Response.Size);
Response.Free;
end;
Вы должны изучить параметр 'Charset' для заголовка Content-Type. –
У меня был подобный вопрос некоторое время назад, я думаю, что ответ [Remy Lebeau] (http://stackoverflow.com/a/18832982/800214) может помочь. Во всяком случае, не используйте TMemoryStream для строк, используйте TStringStream – whosrdaddy
НЕ используйте 'TStringStream'! В D2009 + для этого требуется указать «TEncoding» в конструкторе, и впоследствии вы не сможете его изменить. Если вы не знаете точную кодировку раньше времени, вы можете легко рассортировать кодировку и вызвать сбой преобразования. –