غالبًا ما يقول الأشخاص أنهم دائمًا ما يشعرون بالانزعاج من مشكلة الحروف الصينية المشوشة عند استخدام XMLHTTP. لقد قمت بمراجعة بعض المعلومات، والنتيجة خيبت أملي. يستخدم الجميع تقنية ASP من جانب الخادم لحل هذه المشكلة.
دعونا أولاً نحلل سبب حدوث مشكلة الأحرف الصينية المشوهة. السبب بسيط للغاية: عندما يحصل XMLHTTP على الاستجابة، فإنه يفترض أن الاستجابة هي بترميز UTF8، ويتعامل مع ترميز HTML الذي يحتوي على GB2312 على أنه تنسيق UTF8.
لذا، بخلاف استخدام تقنية البرمجة النصية من جانب الخادم ASP، ألا يوجد حل من جانب العميل؟ الجواب هو: نعم!
لقد استخدمت البرنامج النصي لعميل VBScript لتنفيذ الطريقة بنجاح دون استخدام ASP، وحللت مشكلة الأحرف الصينية المشوهة عندما يقوم XMLHTTP بالزحف إلى صفحات HTML.
لماذا نستخدم VBScript بدلاً من JScript شائع الاستخدام؟ تقوم استجابة 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>
<الرأس>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script language=VBScript>
البايتات الوظيفية2BSTR(vIn)
strReturn = ""
لأني = 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.Send
أتش تي أم أل خافت
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
وظيفة نهاية
الوظيفة viewSource2()
dimXmlHttp
تعيين XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET"، " http://www.google.com "، خطأ
XmlHttp.setRequestHeader "نوع المحتوى"، "نص/XML"
XmlHttp.Send
أتش تي أم أل خافت
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
وظيفة النهاية
</script>
<BODY bgcolor=gainsboro style='border:1pt Solid White'>
<فئة الجدول = النص>
<تر>
<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>