delphi vs c#post返回不同的字符串 – utf问题?
发布时间:2020-12-15 09:27:02 所属栏目:大数据 来源:网络整理
导读:我发布了两个表单 – 一个在c#中,另一个在delphi中.但结果字符串似乎有所不同: c#返回:¤@@ 1 @@@@ 1 @@@@ 1 @@x?m?±?0?… delphi返回:#$1E’@@ 1 @@@@ 1 @@@@ 1 @@ x’#$009C … 和sice都是压缩流我在尝试解压缩时遇到错误…… C#是’正确的’ – 即.提
我发布了两个表单 – 一个在c#中,另一个在delphi中.但结果字符串似乎有所不同:
c#返回:¤@@ 1 @@@@ 1 @@@@ 1 @@x?m?±?0?… 和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; -编辑- 解决方法
事实证明,将post方法更改为使用stream的方法解决了问题.正如我在某些网站上发现的那样:“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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |