delphi 2010 idhttp使用TIdMultiPartFormDataStream post 中文问号,该怎么处理

delphi 2010 idhttp使用TIdMultiPartFormDataStream post 中文问号
delphi 2010 idhttp使用TIdMultiPartFormDataStream post时,服务器收到的中文都是问号(???????),使用sniffer抓包发现发送的也是问号,确认是TIdMultiPartFormDataStream的问题,请问高手如果解决?
Delphi(Pascal) code

  PostData := TIdMultiPartFormDataStream.Create;
  PostData.AddFormField('url', '');
  PostData.AddFormField('tag', '电影');
  idhttp1.Post(posturl, PostData,strm);


delphi版本为2010,使用delphi7时没问题.

------解决方案--------------------
这个,应该是宽字节的问题
解决的话,BS中传输中文参数里,先将中文用URLEncode编码,服务端接收到之后解码
就像百度搜索中文,比如“我是菜鸟”
http://www.baidu.com/baidu?word=%C4%E3%CA%C7%B2%CB%C4%F1
------解决方案--------------------
PostData := TIdMultiPartFormDataStream.Create;
替换成以下试试看:
var
postData: TStrings;
begin
...
postData := TStringList.Create;
postData.Add('tag=电影') ; 
...
postData.Free;
end;

在和服务端servlet通讯时,我采用 THTTPReqResp 组件,url就是完整的URL地址,如果参数值有中文,需要用HttpEncode(AnsiToUtf8(paramValue))

var
FHttpReq: THTTPReqResp;
...

function TDataSync.GetResponseContent(url: string): string;
var
strStream: TStringStream;
begin
result := '';
strStream := TStringStream.Create('',TEncoding.UTF8);
try
FHttpReq.URL := url;
FHttpReq.Execute('',strStream);
result := strStream.DataString;
except
SetLastError('无效数据包,可能网络故障!');
end;
strStream.Free;
end;

如果是上传文件,我用 TIdHttp 控件。如下:
function TDataSync.UploadFile(fileName: string; var url: string): boolean;
var
sUrl: string;
idHttp: TIdHTTP;
strStream: TStringStream;
data: TIdMultiPartFormDataStream;
begin
result := false;
if not FileExists(fileName) then exit;

data := TIdMultiPartFormDataStream.Create();
data.AddFile('attachment',fileName,GetMIMETypeFromFile(fileName));
idHttp := TIdHTTP.Create(self);
strStream := TStringStream.Create('',TEncoding.UTF8);
try
sUrl := Format('%s%s',[FWebSite,URL_UPLOADFILE]);
idHttp.Post(sUrl,data,strStream);
result := GetResponseState(strStream.DataString);
url := AnalysisUploadFileUrl(strStream.DataString);
except
end;
idHttp.Free;
strStream.Free;
data.Free;
end;

------解决方案--------------------
URLEncode编码
URLDecode解码
------解决方案--------------------
想了一个办法,基本上也就是将TIdMultiPartFormDataStream里的宽字节字符串数据流转换成单字节的

探讨

3楼的第一种方法也用过,也不行,服务器端是gb2312发过去也是中文乱码。希望实现方式为,像delphi7一样,发送去的中文到服务端不需要解码即可正确显示中文。

------解决方案--------------------
等我回家了把代码给你吧,留个邮箱!