MSXML:XMLHTTP不支持来自标头的字符集

时间:2014-11-14 13:19:13

标签: delphi msxml

我正在使用MSXML2_TLB.pas类型库生成的Microsoft XML来调用一个非常简单的Web服务,所以我不需要完整的XML包装,只需执行此操作:

var
  r:XMLHTTP;
begin
  r:=CoXMLHTTP.Create;
  r.open('POST',WebServiceURL,false,'','');
  r.setRequestHeader('Content-Type','application/xml');
  r.send('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '+
    'xmlns:ns="http://somebigcorporation.com/api/ws1/">'+
    '<soapenv:Body>'+
    //snip: irrelevant to the question
    '</soapenv:Body></soapenv:Envelope>');

  if r.status<>200 then raise Exception.Create(r.statusText);
  Result:=(r.responseXML as DOMDocument).documentElement.firstChild.firstChild.selectSingleNode('importantData');
end;

网络服务很好地响应状态200和Content-Type: text/xml; charset=iso-8859-1

在某些情况下,documentElement为nil(以上代码会引发访问冲突)。显然responseXML存在,但仅提供parseError对象(在the docs中表示如此),parseError.reason在这些情况下为An invalid character was found in text content.

为什么解析器没有从响应头中获取'charset'值?有没有办法告诉XMLHTTP实例使用响应头中的charset值?

更新:我不知道它是否重要,但响应也不是以<?xml开头,即使它确实如此,我也无法请求/修改它它将具有encoding="iso-8859-1"属性。

1 个答案:

答案 0 :(得分:0)

我认为您需要在请求中设置字符集,以便结果正确。

r.setRequestHeader('Content-Type', 'application/xml; charset=ISO-8859-1');