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

delphi vs c#post返回不同的字符串-utf问题?,c#,delphi,post,delphi-2010,utf,C#,Delphi,Post,Delphi 2010,Utf,我发布了两个表格——一个是c#表格,另一个是德尔福表格。但结果字符串似乎不同: c#返回:·1@@@1@@@1@@@xśm˱0Đ… delphi返回:\$1E'@@1@@@1@@@1@@x'\$009C… sice和sice都是压缩流我在尝试解压缩时出错了。。。C#是“正确的”——即摘录。我不是delphi方面的专家-我只需要将一些代码从c#转换成delphi c#代码: delphi代码: -编辑- 我使用的是Delphi2010,结果是将post方法更改为使用streams的方法解决了这个

我发布了两个表格——一个是c#表格,另一个是德尔福表格。但结果字符串似乎不同:

c#返回:
·1@@@1@@@1@@@xśm˱0Đ…

delphi返回:
\$1E'@@1@@@1@@@1@@x'\$009C…

sice和sice都是压缩流我在尝试解压缩时出错了。。。C#是“正确的”——即摘录。我不是delphi方面的专家-我只需要将一些代码从c#转换成delphi

c#代码:

delphi代码:

-编辑-
我使用的是Delphi2010,结果是将post方法更改为使用streams的方法解决了这个问题。正如我在一些网站上发现的:“TIdHTTP.Post()还不支持从TStringList发布Unicode。您必须先将Unicode保存到单独的TStream,然后再发布。”

如果您使用Delphi2010(2009+),您应该知道用于存储信息的本机sting类型不是UTF8,而是16位基(USC2)。Hance,可能在某个地方数据从UTF8转换为USC2,然后二进制数据被转换


一个问题:为什么要以UTF8而不是八位字节(如原始字节)的形式发送二进制数据?

哪个版本是正确的,可以解压缩?使用诸如Fiddler2之类的工具来监视实际正在进行的HTTP通信量可能会更好。这会让你看到请求的区别。c版本是正确的,我只是想到了fiddler…我想我已经找到了原因:
TIdHTTP.Post()还不支持从TStringList发布Unicode。您必须先将Unicode保存到一个单独的TStream中,然后将其发布。
您能为我们提供一个在C版本代码中工作的URL吗?我想您知道,#表示字符,#表示Delphi中的Unicode代码点?”A'#66'C'='ABC'和#$0040=='@'我只是在翻译我收到的代码-不要试图理解它(我放弃了)。
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;
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;