我正在尝试使用客户端的网址来显示我们网站上的Feed。我遇到的问题是它们的应用程序似乎是用java编写的,而XML响应的编码是ISO8859_1,这是MSXML活动x对象不支持的编码。请参阅此链接以供参考:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q304625。
问题是,我非常怀疑我是否能够更改,甚至请求更改响应xml的编码。还有其他的解决方法吗?
CODE
Function GetXmlDom(pUrl)
Set GetXmlDom = Server.CreateObject("MSXML2.DOMDocument")
GetXmlDom.async = False
GetXmlDom.setProperty "ServerHTTPRequest", True
GetXmlDom.load(pUrl)
End Function
它将首先显示看起来很好的所有标题。然后我得到这个错误:
错误代码1072896658 Reason System不支持指定的编码。 系统错误:-1072896658。
如果我在浏览器中导航到同一个URL,它会正确显示XML文档。
您能否为相同的
建议解决方案谢谢, 罗希特夏尔
答案 0 :(得分:1)
我非常怀疑我是否能够更改,甚至要求更改响应xml的编码。
嗯,它坏了。 The IANA says ISO-8859-1的规范名称为ISO-8859-1
。和ISO8859_1不是它的合法别名。要实践良好的互联网公民身份,您应该请求更改。指出它已经坏了,并要求修复。为了实践良好的公民身份,您的客户应该修复该错误。
ISO8859_1是我最初在Java库代码中使用的名称,作为映射到ISO-8859-1的名称。这种用法很好,虽然我不理解映射的必要性。但是从那里人们认为Java使用的内部名称实际上是编码名称 - 不是真的。它实际上只是Java所知的别名。然后,这种错误的信念传播到Java之外的其他库和框架,这些库和框架错误地认为如果Java使用ISO8859_1作为编码名称,它必须是正确的。底线是ISO8859_1不应该用于需要IANA编码字符串的实际xml文档中。
与此同时......
如果我在浏览器中导航到同一个URL,它会正确显示XML文档。
这不是我得到的。使用它作为rss源:
<?xml version="1.0" encoding="ISO8859_1"?>
<rss version="2.0">
<channel>
<title>FeedForAll Sample Feed</title>
<description>RSS is a fascinating technology. ....</description>
...
我在IE8中得到了这个结果:
要在vbscript中阅读,您需要将ISO8859_1
替换为ISO-8859-1
。使用ServerHTTPRequest对象非常简单。
Function UrlGet(url)
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xmlhttp.open "GET", url, False
xmlhttp.send
'' treat the output as plain text. We know it may be broken.
UrlGet = xmlhttp.responseText
End Function
Dim url
url = "http://localhost/misc/broken.rss"
'' the above URL starts with an XML declaration of
'' <?xml version="1.0" encoding="ISO8859_1"?>
'' ... which is invalid, because ISO8859_1 is not a valid
'' name for an XML encoding.
Dim urlText
urlText = UrlGet(url)
'' replace the encoding with what we think it should be
urlText = Replace(urlText,"encoding=""ISO8859_1""","encoding=""ISO-8859-1""")
Set doc1 = CreateObject("Msxml2.DOMDocument.6.0")
doc1.async = False
doc1.preserveWhiteSpace= False ' True
doc1.loadXml(urlText)