gpt4 book ai didi

c# - delphi vs c# post 返回不同的字符串-utf 问题?

转载 作者:太空狗 更新时间:2023-10-30 00:46:32 25 4
gpt4 key购买 nike

我发布了两种形式——一种使用 C#,一种使用 Delphi。但结果字符串似乎不同:

c# 返回:¤@@1@@@@1@@@@1@@xśmȱÂ0Đ...
德尔福返回:#$1E'@@1@@@@1@@@@1@@x'#$009C...

并且 sice 都是压缩流 我在尝试解压缩它时遇到错误... C# 是“正确的”- 即。摘录。我不是 delphi 专家 - 我只需要将一些代码从 c# 转换为 delphi。

c#代码:

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;
}

德尔福代码:

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;

-编辑-我正在使用 delphi 2010

最佳答案

事实证明,将 post 方法更改为使用流的方法解决了这个问题。正如我在某些网站上发现的那样:“TIdHTTP.Post() 尚不支持从 TStringList 发布 Unicode。您必须先将 Unicode 保存到单独的 TStream,然后再发布它。”

function GetData(aParam:TStringList; aurl:string):string;
var
req: TIdHTTP;
i: integer;
vars: string;
reqStream, responseStream :TStringStream;
begin

vars := '';

for i := 0 to aParam.Count - 1 do
begin
vars := vars + aParam.Names[i] + '=' + aparam.ValueFromIndex[i] + '&';
end;

reqStream := TStringStream.Create(vars);
responseStream := TStringStream.Create;

req := TIdHTTP.Create();
with req do
begin
Request.URL := aurl;
Request.ContentType := 'application/x-www-form-urlencoded';
Request.Method := 'POST';
Request.CharSet := 'UTF-8';
Request.AcceptCharSet := 'UTF-8';
end;

req.Post(aurl, reqStream,responseStream);

Result := responseStream.DataString;

reqStream.Free;
responseStream.Free;
req.Free;
end;

关于c# - delphi vs c# post 返回不同的字符串-utf 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3044365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com