300分求Microsoft.XMLHTTP的编码问题 ( 积分: 300 )

  • 主题发起人 主题发起人 Adnil
  • 开始时间 开始时间
A

Adnil

Unregistered / Unconfirmed
GUEST, unregistred user!
使用Microsoft.XMLHTTP调用一个utf-8编码的asp网页,传送一个name参数,asp网页总是只能取到一些乱码,请教有什么办法? (我只能改delphi调用端,asp网页是别人的没办法改)

Delphi代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
xhttp: Variant;
begin
xhttp := CreateOleObject('Microsoft.XMLHTTP');
xhttp.Open('GET', 'http://localhost/test.asp?name=测试测试', False);
// xhttp.Open('GET', 'http://localhost/test.asp?name=' + urlencode('测试测试'), False); //同样无效
xhttp.Send;
showmessage(xhttp.responseText);
end;

ASP代码如下:
<%@ Language=VBScript Codepage=65001%>
<%
Response.Charset = &quot;utf-8&quot;
name = Request.QueryString(&quot;name&quot;)
Response.Write name
%>
 
你传入的字符串转成utf-8形式试试,再将返回的字串转成AnsiString后showmessage
 
UTF8Encode(xhttp.responseText)
 
同意楼上
 
给你一段例子,自己研究吧。
procedure TaccMain.btnOKClick(Sender: TObject);
var
liCount:integer;
loXmlHttpAcc,loXMLDoc:Variant;
begin
liCount:=StrToIntDef(edtCount.Text,0);
if liCount<=0 then
begin
ShowMessage('前记录数需要是大于0的整数!');
Exit;
end;
Screen.Cursor:=crHourGlass;
try // 取报表流程
if Login('admin','',loXmlHttpAcc) then // 1.登录
begin //
loXMLDoc:=GetXMLDocParam; // 2.生成参数XML
if SendXMLParam(loXmlHttpAcc,loXMLDoc) then // 3.发送XML参数给服务器
GetReport; // 4.取报表
end;
finally
Screen.Cursor:=crDefault;
end;
end;
function TaccMain.SendXMLParam(poXmlHttpAcc, poXmlDoc: variant): boolean;
var
lsSendParamPath:string;
begin
Result:=false;
lsSendParamPath:=sServerURL+'/'+sSetXMLPath;
try
poXmlHttpAcc.open('Post',lsSendParamPath,false);
poXmlHttpAcc.Send(poXmlDoc);
Result:=true;
except
on E:Exception do
begin
ShowMessage('发送XML参数出错,请看详细信息:'+E.Message);
end;
end;
end;
function TaccMain.GetXMLDocParam: variant;
var
loXmlDoc,loPi,loRootNode,loParameterNode,loNameNode,loValueNode:Variant;
begin
//------------------ 开始生成XML公用信息
loXmlDoc := CreateOleObject('MSXML2.DOMDocument');
loXmlDoc.async := false;
loPi:=loXmlDoc.createProcessingInstruction('xml', 'version=''1.0'' encoding=''GB2312''');
loXmlDoc.appendChild(loPi);
loRootNode := loXmlDoc.createElement('root');
loXmlDoc.appendChild(loRootNode);
loParameterNode:=loXmlDoc.createElement('parameter');
loRootNode.appendChild(loParameterNode);
//------------------- 结束生成XML公用信息,此部分不能更改

//-------------------开始给报表参数赋值,这部分要根据报表的条件输入界面的参数来设值
loNameNode:=loXmlDoc.createElement('name');
//赋值为条件界面的'前记录数'输入项的ID
loNameNode.text:='6BB8241B218A4A2C920E9240CD1B7944';
loValueNode:=loXmlDoc.createElement('value');
//给条件界面的'前记录数'输入项赋值,格式为'显示值<TS>%真实值'
loValueNode.text:=trim(edtCount.Text)+'<TS>'+trim(edtCount.Text);
loParameterNode.appendChild(loNameNode);
loParameterNode.appendChild(loValueNode);
//-------------------结束给报表参数赋值
Result:=loXmlDoc;
end;
 
后退
顶部