2010-12-02 15 views
0

Ich versuche, eine Client-URL verwenden, um Feeds auf unserer Website zu zeigen. Das Problem, das ich habe, ist, dass es scheint, dass ihre Anwendung in Java geschrieben wurde, und die Codierung der XML-Antwort ist ISO8859_1, eine Codierung, die von dem aktiven MSXML-Objekt x nicht unterstützt wird. Bitte beachten Sie diesen Link als Referenz: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q304625.Vbscript versucht, RSS-Feeds zu lesen haben Problem des Systems unterstützt nicht die angegebene Codierung

Das Problem ist, ich bezweifle stark, dass ich in der Lage sein werde, zu ändern oder sogar die Codierung der Antwort XML zu ändern. Gibt es dafür noch eine andere Arbeit?

CODE

Function GetXmlDom(pUrl) 
     Set GetXmlDom = Server.CreateObject("MSXML2.DOMDocument") 
     GetXmlDom.async = False 
     GetXmlDom.setProperty "ServerHTTPRequest", True 
     GetXmlDom.load(pUrl) 

End Function 

Es wird zuerst alle Header anzeigen, die fein zu sein scheinen. Dann erhalte ich diesen Fehler:

Fehlercode 1072896658 Grund System unterstützt die angegebene Codierung nicht. Systemfehler: -1072896658.

Wenn ich in meinem Browser zur selben URL navigiere, wird das XML-Dokument in Ordnung angezeigt.

Können Sie bitte eine Lösung für die gleiche

Danke, Rohit

Antwort

1

I highly doubt that I will be able to change, or even request to change the encoding of the response xml.

Nun, es ist gebrochen vorschlagen. The IANA says dass der kanonische Name für ISO-8859-1 ISO-8859-1 ist. und ISO8859_1 ist kein legaler Alias ​​dafür. Um gute Internet-Staatsbürgerschaft zu üben, sollten Sie die Änderung anfordern. Weisen Sie darauf hin, dass es kaputt ist und fragen Sie nach einer Lösung. Um gute Staatsbürgerschaft zu üben, sollte Ihr Kunde diesen Fehler beheben.

ISO8859_1 ist ein Name, der ursprünglich innerhalb des Java-Bibliothekscodes als Name verwendet wurde, der auf ISO-8859-1 abgebildet wurde. Diese Verwendung war in Ordnung, obwohl ich die Notwendigkeit für das Mapping nicht verstehe. Aber von dort nahmen die Leute an, dass der interne Name, den Java verwendet, tatsächlich der Kodierungsname ist - nicht wahr. Es ist wirklich ein Alias, der nur für Java bekannt ist. Und dann verbreitete sich dieser Irrglaube auf andere Bibliotheken und Frameworks außerhalb von Java, die fälschlicherweise annahmen, dass, wenn Java ISO8859_1 als Kodierungsnamen verwendet, dies richtig sein muss. Die Quintessenz ist, dass ISO8859_1 nicht in tatsächlichen XML-Dokumenten verwendet werden sollte, in denen eine IANA-Codierungszeichenfolge erwartet wird.


In der Zwischenzeit ...

If i navigate to the same URL in my browser, it displays the XML document fine.

Das ist nicht, was ich bekomme. Mit diesem als rss Quelle:

<?xml version="1.0" encoding="ISO8859_1"?> 
<rss version="2.0"> 
    <channel> 
<title>FeedForAll Sample Feed</title> 
<description>RSS is a fascinating technology. ....</description> 
... 

ich dieses Ergebnis in IE8:

alt text

Um es in Vbscript zu lesen, müssen Sie ersetzen die ISO8859_1 mit ISO-8859-1. Dies ist ziemlich einfach mit dem ServerHTTPRequest -Objekt.

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) 
Verwandte Themen