服务器端,用c#发布Web Service的asmx文件,web.config文件中指定:
<globalization requestEncoding="GB2312" responseEncoding="GB2312"/>客户端delphi6编写com组件,声明引用MSXML2_TLB.pas
声明变量:
XmlDoc:  DOMDocument;
MyHttp: XMLHTTP;
xmlText:String;xmlText := xmlText + '<?xml version="1.0" encoding="utf-8"?>';
...
xmlText := xmlText + '<p_szContent>测试</p_szContent>';
....
XmlDoc := CoDOMDocument.Create;
xmlDoc.async := false;
xmlDoc.loadXML(xmlText);
xmlDoc.save('1.xml'); //这句检查1.xml,可以正常显示中文,说明xml数据没问题    MyHttp := CoXMLHTTP.Create;
    MyHttp.open('POST','http://localhost/test.asmx',false,'','');
    MyHttp.setRequestHeader('Content-Type','text/xml; charset=utf-8');
    //改为如下一样不行
    //MyHttp.setRequestHeader('Content-Type','text/xml; charset=gb2312);
    MyHttp.setRequestHeader('SOAPAction','http://localhost/webservices/Helloworld');
    MyHttp.send(xmlDoc);    xmlText := MyHttp.responseText; //能正常返回中文结果现在问题是:提交的中文"测试"到服务器,打印出是乱码,如何解决....

解决方案 »

  1.   

    xmlText := xmlText + '<?xml version="1.0" encoding="GB2312">'
      

  2.   

    我没有用过CoXMLHTTP,不过楼主代码有一处很明显错误,下面两句顺序弄反了.MyHttp.open('POST','http://localhost/test.asmx',false,'','');//这句调用的时候,已经把HTTP头信息发出了.
    MyHttp.setRequestHeader('Content-Type','text/xml; charset=utf-8');//这儿再调用已经无效了
    DELPHI6+SP2带的WEBSERVICE支持性能足够可靠了,不知道楼主为什么要用这种方式使用WEBSERVICE.
      

  3.   

    回复: halfdream(哈欠) 你试试将
    MyHttp.setRequestHeader('Content-Type','text/xml; charset=utf-8');
    放在open前面,不报错误??? ;)因为服务器端用的是.net的web服务。请只针对我的问题解决问题,其他建议免谈。我的上述代码发送E文都没有问题,只是中文有问题
      

  4.   

    呵呵。。是我说错了,我没有用过那东西。
    你可以用工具截获你发送的数据包,没有工具也可以自己写一个接收数据POST数据的程序,记入文件日志中,先确实客户端请求数据是否严格按约定。
      

  5.   

    自己搞定!结帖了....
    将中文进行base64编码,服务器端解码就ok了