Je poste deux formulaires - un en C# et un en Delphi. Mais la chaîne de résultat semble être différent:delphi vs C# post renvoie des chaînes différentes - problème utf?
C# retours: ¤@@[email protected]@@@[email protected]@@@[email protected]@xśm˱Â0Đ...
retours delphi: #$1E'@@[email protected]@@@[email protected]@@@[email protected]@x'#$009C...
et je reçois des erreurs tout en essayant de le décompresser ... SICE les deux sont des flux comprimé Le C# est 'correct' - ie. extraits. Je ne suis pas un expert sur Delphi - J'ai juste besoin de convertir un morceau de code de C# à Delphi.
C# code:
string GetData(Hashtable aParam, string ServerURL)
{
string Result = "";
WebRequest Request = HttpWebRequest.Create(ServerURL);
Request.Method = "POST";
Request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
UTF8Encoding encUTF8 = new System.Text.UTF8Encoding(false);
StreamWriter writer = new StreamWriter(Request.GetRequestStream(), encUTF8);
foreach (DictionaryEntry element in aParam)
{
writer.Write(element.Key + "=" + element.Value + "&");
}
writer.Close();
writer.Dispose();
WebResponse Response = Request.GetResponse();
StreamReader Reader = new StreamReader(Response.GetResponseStream(), System.Text.Encoding.Default);
Result = Reader.ReadToEnd();
Reader.Close();
Response.Close();
Reader.Dispose();
return Result;
}
delphi:
function GetData(aParam:TStringList; ServerURL:string):string;
var
req: TIdHTTP;
res: string;
begin
req := TIdHTTP.Create();
with req do
begin
Request.ContentType := 'application/x-www-form-urlencoded; charset=UTF-8';
Request.Method := 'POST';
Request.CharSet := 'utf-8';
Request.AcceptCharSet := 'utf-8';
res := Post(ServerURL, aParam);
end;
Result := res;
req.Free;
end;
-Edit- J'utilise delphi 2010
Quelle version est correcte et peut être décompressée? Il pourrait être bon d'utiliser un outil tel que Fiddler2 pour surveiller le trafic HTTP qui se passe réellement. Cela vous permettrait de voir quelle est la différence dans la demande. –
la version C# est correcte, je viens de penser à fiddler ... – argh
Je pense que j'ai trouvé la raison: 'TIdHTTP.Post() ne supporte pas de publier Unicode à partir d'un TStringList pour le moment. Vous devrez d'abord enregistrer l'Unicode dans un autre TStream, puis le publier à la place. » – argh