TStringStream
in D2009+ uses UnicodeString
and is TEncoding
-aware so DO NOT create a UTF8String
manually:
var
server: TIdHttp;
Parameters,response: TStringStream;
begin
response := TStringStream.Create;
Parameters := TStringStream.Create('param1=Value1¶m2=عربي/عرب¶m3=Value3', TEncoding.UTF8);
Server.Post('http://www.example.com/page.php',Parameters,response);
end;
Alternatively, the TStrings
version also encodes to UTF-8 by default:
var
server: TIdHttp;
Parameters: TStringList;
Response: TStringStream;
begin
response := TStringStream.Create;
Parameters := TStringList.Create;
Parameters.Add('param1=Value1');
Parameters.Add('param2=عربي/عرب');
Parameters.Add('param3=Value3');
Server.Post('http://www.example.com/page.php',Parameters,response);
end;
Either way, you should set the request charset before calling Post()
so the server knows you are sending UTF-8 encoded data:
Server.Request.ContentType := 'application/x-www-form-urlencoded';
Server.Request.Charset := 'utf-8';