加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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?…
delphi返回:#$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方法更改为使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读