delphi vs c#post返回不同的字符串-utf问题?
我发布了两个表格——一个是c#表格,另一个是德尔福表格。但结果字符串似乎不同: c#返回: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的方法解决了这个
·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;