リモート・ページ・キャプチャでの文字化けしの問題を解決する方法

2088 ワード

普段使っているウェブファイルは基本的にgb 2312符号化方式なので、xmlhttpコントロールで読み取ると文字化けして問題になるに違いないが、すべてのファイルをutf-8符号化に変更するのは操作上面倒である.繰り返し比較して、私は比較的実用的な解決方法を見つけた.ffはoverrideMimeTypeメソッドを提供し,戻り値の符号化を指定できるので,gb 2312にこのメソッドを指さすだけで比較的簡単に解決できる.IEについては、受信したバイナリデータをgb 2 utf 8で変換し、ここでexecScript法を用いてvbsの関数を呼び出すvbs結合を用いて符号化変換することができる.
 
  

<br>loadPage("index.htm") <br>function loadPage(url){ <br>    var xh=window.Event?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP") <br>    xh.open("GET",url,true) <br>    if(window.Event) <br>        xh.overrideMimeType("text/xml;charset=gb2312") <br>    xh.onreadystatechange=function(){ <br>        if(xh.readyState!=4) <br>            return <br>        var v <br>        v=window.Event?xh.responseText:window.gb2utf8(xh.responseBody) <br>        alert(v) <br>    } <br>    window.gb2utf8=function(data){ <br>        var glbEncode=[],t,i,j,len <br>        gb2utf8_data=data <br>        execScript("gb2utf8_data = MidB(gb2utf8_data, 1)+' '", "vbscript") <br>        t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2") <br>        t=t.split("@") <br>        i=0 <br>        len=t.length <br>        while(++i<len){ <br>            j=t[i].substring(0,4) <br>            if(!glbEncode[j]) { <br>                gb2utf8_char = eval("0x"+j) <br>                execScript("gb2utf8_char=Chr(gb2utf8_char)","vbscript") <br>                glbEncode[j]=escape(gb2utf8_char).substring(1,6) <br>            } <br>            t[i]=glbEncode[j]+t[i].substring(4) <br>        } <br>        gb2utf8_data=gb2utf8_char=null <br>        return unescape(t.join("%")).slice(0,-1) <br>    } <br>    xh.send(null) <br>} <br>