Люди часто говорят, что их всегда беспокоит проблема искажения китайских символов при использовании XMLHTTP. Я проверил некоторую информацию, и результат меня разочаровал. Для решения этой проблемы все используют серверную технологию ASP.
Давайте сначала проанализируем, почему возникает проблема с искаженными китайскими иероглифами. Причина очень проста: когда XMLHTTP получает ответ, он предполагает, что ответ имеет кодировку UTF8. Он обрабатывает HTML, содержащий кодировку GB2312, как формат UTF8. Поэтому появляются искаженные китайские символы.
Итак, существует ли какое-либо решение на стороне клиента, кроме использования технологии сценариев на стороне сервера ASP? Ответ: да!
Я использовал клиентский сценарий VBScript для успешной реализации этого метода без использования ASP и решил проблему искажения китайских символов при обходе XMLHTTP HTML-страниц.
Зачем использовать VBScript вместо широко используемого JScript? XMLHTTP's responseBody возвращает массив беззнаковых байтов. VBScript предоставляет множество функций для управления строками и форматирования данных, а также методы доступа к безопасным массивам. Эти функции или методы не существуют в JScript. Здесь нам нужно использовать встроенные функции VBScript: MidB, AscB, LenB и т. д. для доступа к responseBody.
Отвлекаясь, я не подчеркиваю, что VBScript лучше JScript, но оба имеют свои особенности. Я впервые пишу статью о CSDN. Спасибо за вашу поддержку. Написание этой статьи преследует две цели: во-первых, тренировать себя; во-вторых, я надеюсь, что, сталкиваясь с проблемами, вы сможете научиться анализировать проблемы, быть целенаправленными и понимать, что происходит и почему.
Я дал код Test.htm, который включает в себя два приложения: получение собственного кода и получение кодов других веб-страниц. Конкретный сценарий выглядит следующим образом:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN. ">
<!-- Автор: Сяо Линь, [email protected] -->
<HTML>
<ГОЛОВКА>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script Language=VBScript>
Функция bytes2BSTR(vIn)
стрReturn = ""
Для i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
Если ЭтотCharCode < &H80 Тогда
стрReturn = strReturn & Chr(ThisCharCode)
Еще
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
я = я + 1
Конец, если
Следующий
bytes2BSTR = стрReturn
Конечная функция
Функция viewSource1()
dimXmlHttp
установите XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open «GET», document.location.href, false
XmlHttp.setRequestHeader «Тип контента», «текст/XML»
XmlHttp.Send
тусклый HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Конечная функция
Функция viewSource2()
dimXmlHttp
установите XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", " http://www.google.com ", false
XmlHttp.setRequestHeader «Тип контента», «текст/XML»
XmlHttp.Send
тусклый HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Конечная функция
</script>
<BODY bgcolor=gainsboro style='border:1pt сплошной белый'>
<ТАБЛИЦА класса=текст>
<тр>
<td class=text>Полное решение сценария на стороне клиента для устранения искаженных китайских символов, когда XMLHTTP получает HTML-страницы</td>
</tr>
<тр>
<td class=button><button onclick=viewSource1()>Просмотр кода собственной веб-страницы</button></td>
</tr>
<тр>
<td class=button><button onclick=viewSource2()>Просмотреть код главной страницы Google</button></td>
</tr>
</ТАБЛИЦА>
</ТЕЛО>
</HTML>