ผู้คนมักพูดว่าพวกเขามักจะมีปัญหากับปัญหาตัวอักษรจีนที่อ่านไม่ออกเมื่อใช้ XMLHTTP ฉันตรวจสอบข้อมูลบางอย่างแล้วผลลัพธ์ก็ทำให้ฉันผิดหวัง ทุกคนใช้เทคโนโลยีฝั่งเซิร์ฟเวอร์ ASP เพื่อแก้ไขปัญหานี้
เรามาวิเคราะห์กันก่อนว่าเหตุใดจึงเกิดปัญหาอักษรจีนที่อ่านไม่ออก เหตุผลนั้นง่ายมาก: เมื่อ XMLHTTP ได้รับการตอบกลับ จะถือว่าการตอบกลับนั้นเข้ารหัสแบบ UTF8 โดยจะถือว่า HTML ที่มีการเข้ารหัส GB2312 เป็นรูปแบบ UTF8 ดังนั้น อักขระที่อ่านไม่ออกจึงปรากฏขึ้น
ดังนั้น นอกเหนือจากการใช้เทคโนโลยีการเขียนสคริปต์ฝั่งเซิร์ฟเวอร์ ASP แล้ว ไม่มีโซลูชันฝั่งไคลเอ็นต์เลยหรือ คำตอบคือ: ใช่!
ฉันใช้สคริปต์ไคลเอ็นต์ VBScript เพื่อนำวิธีการนี้ไปใช้โดยไม่ใช้ ASP ได้สำเร็จ และแก้ไขปัญหาอักขระภาษาจีนที่อ่านไม่ออกเมื่อ XMLHTTP รวบรวมข้อมูลหน้า HTML
เหตุใดจึงใช้ VBScript แทน JScript ที่ใช้กันทั่วไป responseBody ของ XMLHTTP ส่งคืนอาร์เรย์ไบต์ที่ไม่ได้ลงนาม 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>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script language=VBScript>
ฟังก์ชั่น bytes2BSTR(vIn)
strReturn = ""
สำหรับ i = 1 ถึง LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
ถ้า ThisCharCode < &H80 แล้ว
strReturn = strReturn & Chr(ThisCharCode)
อื่น
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
ฉัน = ฉัน + 1
สิ้นสุดถ้า
ต่อไป
bytes2BSTR = strReturn
ฟังก์ชันสิ้นสุด
ฟังก์ชัน viewSource1()
dimXmlHttp
ตั้ง XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", document.location.href, เท็จ
XmlHttp.setRequestHeader "ประเภทเนื้อหา", "ข้อความ/XML"
XmlHttp ส่ง
HTML สลัว
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
ฟังก์ชันสิ้นสุด
ฟังก์ชัน viewSource2()
dimXmlHttp
ตั้ง XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", " http://www.google.com ", เท็จ
XmlHttp.setRequestHeader "ประเภทเนื้อหา", "ข้อความ/XML"
XmlHttp ส่ง
HTML สลัว
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
สิ้นสุดฟังก์ชัน
</script>
<BODY bgcolor=gainsboro style='border:1pt solid white'>
<คลาสตาราง=ข้อความ>
<tr>
<td class=text>โซลูชันสคริปต์ฝั่งไคลเอ็นต์ที่สมบูรณ์สำหรับอักขระภาษาจีนที่อ่านไม่ออกเมื่อ XMLHTTP รับหน้า HTML</td>
</tr>
<tr>
<td class=button><button onclick=viewSource1()>ดูโค้ดหน้าเว็บของคุณเอง</button></td>
</tr>
<tr>
<td class=button><button onclick=viewSource2()>ดูโค้ดหน้าแรกของ Google</button></td>
</tr>
</ตาราง>
</ร่างกาย>
</HTML>