XMLHTTPを使うといつも漢字化けの問題に悩まされる、という声をよく聞きます。いくつかの情報を確認しましたが、誰もがこの問題を解決するために ASP サーバー側テクノロジを使用しているという結果にがっかりしました。
まずは中国語の文字化け問題がなぜ起こるのかを分析してみましょう。理由は非常に単純で、XMLHTTP はレスポンスを取得する際に、GB2312 エンコードを含む HTML を UTF8 形式として扱うため、中国語の文字化けが発生します。
では、ASP サーバー側スクリプト テクノロジを使用する以外に、クライアント側のソリューションはないのでしょうか?答えは「はい」です。
VBScript クライアント スクリプトを使用すると、ASP を使用せずにメソッドを実装することができ、XMLHTTP が HTML ページをクロールするときに発生する中国語の文字化けの問題も解決できました。
一般的に使用される JScript ではなく VBScript を使用するのはなぜですか? XMLHTTP の responseBody は、符号なしのバイト配列を返します。 VBScript には、文字列を操作したりデータを書式設定したりするための関数が多数用意されているほか、セーフ配列にアクセスするためのメソッドも用意されています。これらの関数またはメソッドは JScript には存在しません。ここでは、VBScript の組み込み関数 (MidB、AscB、LenB など) を使用して、responseBody にアクセスする必要があります。
余談になりますが、VBScript が JScript よりも優れていることを強調しているわけではありませんが、どちらにも独自の特徴があります。 CSDNに記事を書くのは初めてです。よろしくお願いします。この記事を書く目的は 2 つあります。1 つは自分自身を訓練すること、2 つ目は、問題に遭遇したときに問題を分析し、対象を絞り、何が起こっているのか、そしてなぜ起こっているのかを知ることができるようになることを願っています。
コード Test.htm には、独自のコードの取得と他の Web ページのコードの取得という 2 つのアプリケーションが含まれています。具体的なスクリプトは次のとおりです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN ">
<!-- 著者: Xiao Lin、 [email protected] -->
<HTML>
<ヘッド>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<script language=VBScript>
関数 bytes2BSTR(vIn)
strReturn = ""
For i = 1 から LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 then
strReturn = strReturn & Chr(ThisCharCode)
それ以外
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
終了の場合
次
bytes2BSTR = strReturn
関数の終了
関数 viewSource1()
dimXmlHttp
set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET"、document.location.href、false
XmlHttp.setRequestHeader "Content-Type","text/XML"
XmlHttp.Send
薄暗いHTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
関数の終了
関数 viewSource2()
dimXmlHttp
set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET"、" http://www.google.com "、false
XmlHttp.setRequestHeader "Content-Type","text/XML"
XmlHttp.Send
薄暗いHTML
html = bytes2BSTR(XmlHttp.responseBody)
msgboxhtml
関数終了
</script>
<BODY bgcolor=gainsboro style='border:1pt ソリッドホワイト'>
<TABLE クラス=テキスト>
<tr>
<td class=text>XMLHTTP が HTML ページを取得する際の中国語文字化けに対する完全なクライアント側スクリプト ソリューション</td>
</tr>
<tr>
<td class=button><button onclick=viewSource1()>独自の Web ページ コードを表示する</button></td>
</tr>
<tr>
<td class=button><button onclick=viewSource2()>Google ホームページのコードを表示</button></td>
</tr>
</テーブル>
</BODY>
</HTML>