リモート・ページ・キャプチャでの文字化けしの問題を解決する方法
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>