Я очень сомневаюсь, что смогу изменить или даже запросить изменение кодировки ответа xml.
Ну, это сломано. IANA сообщает , что каноническое имя для ISO-8859-1 - ISO-8859-1
.и ISO8859_1 не является легальным псевдонимом для него.Чтобы практиковать хорошее интернет-гражданство, вы должны запросить изменение.Укажите, что он сломан, и попросите исправить.Чтобы практиковать хорошее гражданство, ваш клиент должен исправить эту ошибку.
ISO8859_1 - это имя, которое первоначально использовалось, я думаю, в коде библиотеки Java, как имя, которое сопоставлено с ISO-8859-1.Это использование было хорошо, хотя я не понимаю необходимость картирования.Но оттуда люди предположили, что внутреннее имя, которое использует Java, на самом деле является именем кодировки, а не истиной.Это действительно псевдоним, известный только Java.И затем это ошибочное убеждение распространилось на другие библиотеки и платформы за пределами Java, которые неверно предполагали, что если Java использует ISO8859_1 в качестве имени кодировки, оно должно быть правильным.Суть в том, что ISO8859_1 не следует использовать в реальных XML-документах, где ожидается строка кодирования IANA.
А пока ...
Если я перехожу по тому же 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)