Die Leute sagen oft, dass sie bei der Verwendung von XMLHTTP immer mit dem Problem verstümmelter chinesischer Zeichen zu kämpfen haben. Ich habe einige Informationen überprüft und das Ergebnis hat mich enttäuscht. Jeder verwendet serverseitige ASP-Technologie, um dieses Problem zu lösen.
Lassen Sie uns zunächst analysieren, warum das Problem der verstümmelten chinesischen Schriftzeichen auftritt. Der Grund ist ganz einfach: Wenn XMLHTTP die Antwort erhält, geht es davon aus, dass die Antwort UTF8-codiert ist. HTML mit GB2312-Codierung wird daher als UTF8-Format behandelt.
Gibt es außer der Verwendung der ASP-Server-seitigen Skripting-Technologie keine clientseitige Lösung? Die Antwort lautet: Ja!
Ich habe das VBScript-Clientskript verwendet, um die Methode ohne Verwendung von ASP erfolgreich zu implementieren, und das Problem der verstümmelten chinesischen Zeichen beim Crawlen von HTML-Seiten durch XMLHTTP gelöst.
Warum VBScript anstelle des häufig verwendeten JScript verwenden? Der ResponseBody von XMLHTTP gibt ein vorzeichenloses Byte-Array zurück. VBScript bietet viele Funktionen zum Bearbeiten von Zeichenfolgen und Formatieren von Daten sowie Methoden für den Zugriff auf sichere Arrays. Diese Funktionen oder Methoden gibt es in JScript nicht. Hier müssen wir die integrierten Funktionen von VBScript verwenden: MidB, AscB, LenB usw., um auf den ResponseBody zuzugreifen.
Um abzuschweifen: Ich betone nicht, dass VBScript besser als JScript ist, aber beide haben ihre eigenen Eigenschaften. Dies ist das erste Mal, dass ich einen Artikel über CSDN schreibe. Vielen Dank für Ihre Unterstützung. Mit dem Schreiben dieses Artikels verfolgen wir zwei Ziele: erstens, um sich selbst zu trainieren; zweitens hoffe ich, dass Sie lernen können, die Probleme zu analysieren, zielgerichtet vorzugehen und zu wissen, was passiert und warum.
Ich habe den Code Test.htm angegeben, der zwei Anwendungen enthält: das Abrufen seines eigenen Codes und das Abrufen anderer Webseitencodes. Das spezifische Skript lautet wie folgt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN ">
<!-- Autor: Xiao Lin, [email protected] -->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script language=VBScript>
Funktion bytes2BSTR(vIn)
strReturn = ""
Für i = 1 Zu LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
Wenn ThisCharCode < &H80 Dann
strReturn = strReturn & Chr(ThisCharCode)
Anders
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
ich = ich + 1
Ende wenn
Nächste
bytes2BSTR = strReturn
Funktion beenden
Funktion viewSource1()
dimXmlHttp
set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open „GET“, document.location.href, false
XmlHttp.setRequestHeader „Content-Type“, „text/XML“
XmlHttp.Send
dunkles HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Funktion beenden
Funktion viewSource2()
dimXmlHttp
set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open „GET“, „ http://www.google.com “, false
XmlHttp.setRequestHeader „Content-Type“, „text/XML“
XmlHttp.Send
dunkles HTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
Endfunktion
</script>
<BODY bgcolor=gainsboro style='border:1pt solid white'>
<TABLE class=text>
<tr>
<td class=text>Komplette clientseitige Skriptlösung für verstümmelte chinesische Zeichen, wenn XMLHTTP HTML-Seiten abruft</td>
</tr>
<tr>
<td class=button><button onclick=viewSource1()>Zeigen Sie Ihren eigenen Webseitencode an</button></td>
</tr>
<tr>
<td class=button><button onclick=viewSource2()>Code der Google-Startseite anzeigen</button></td>
</tr>
</TABLE>
</BODY>
</HTML>