Home > Software engineering >  How to encode the response of an TIdHTTP call?
How to encode the response of an TIdHTTP call?

Time:12-14

In a project I use TIdHTTP to call a webserver.

The webserver is an asp.net test application that returns the following json:

{
   "message":"test ÀÈÉÌÒÙàèéìòù"
}

The response I get in Delphi is a kind of not encoded string:

{"message":"test ÃÃÃÃÃÃàèéìòù"}

this is how I use TIdHTTP:

Result := '';
  IdHTTP := TIdHTTP.Create;
  IdHTTP.Request.MethodOverride := 'ForwardCommand';
  IdSSLIOHandlerSocketOpenSSL :=  TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode       := sslmClient;
  IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions:= [sslvTLSv1_2];
  IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
  IdHTTP.HandleRedirects := True;
  IdHTTP.Response.ContentEncoding := 'UTF-8'; // I tried this but it seems not enough! 
  try
    url := 'testappUrl';
    try
      IdHTTP.ConnectTimeout := 2000; 
      IdHTTP.ReadTimeout := 4000; 
      Response := IdHTTP.Get(url);
      ShowMessage(response);
    except
      on E:Exception do
      begin
        response := StringReplace(E.Message,#10,' ',[rfReplaceAll]);
        response := StringReplace(response,#13,' ',[rfReplaceAll]);
        response := '{"errormessage": "' response '"}';
      end;
    end;
    Result := response;
  finally
    IdHTTP.Free;
  end;

please tell me how I can see the response correctly. Is there a way to force encoding so that accented chars are read correctly?

Thanks.

CodePudding user response:

Try to use a TStringStream forcing the encoding (UTF-8).
Test this code to get the response:

var
  ts:TStringStream;
begin

  ...

  ts := TStringStream.Create(string.Empty, TEncoding.UTF8);
  IdHTTP1.Get('url', ts);

  ShowMessage(ts.DataString);
    or
  ShowMessage(ts.ToString);
  ...
  • Related