リモートページのキャプチャでの文字化けしの問題を解決しますか?

2752 ワード

普段使っているウェブファイルは基本的にgb 2312符号化方式なので、xmlhttpコントロールで読み取ると文字化けして問題になるに違いないが、すべてのファイルをutf-8符号化に変更するのは操作上面倒である.繰り返し比較して、私は比較的実用的な解決方法を見つけた.
ffはoverrideMimeTypeメソッドを提供し,戻り値の符号化を指定できるので,gb 2312にこのメソッドを指さすだけで比較的簡単に解決できる.IEについては、受信したバイナリデータをgb 2 utf 8で変換し、ここでexecScript法を用いてvbsの関数を呼び出すvbs結合を用いて符号化変換することができる.
loadPage("index.htm") function loadPage(url){ var xh=window.Event?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP") xh.open("GET",url,true) if(window.Event) xh.overrideMimeType("text/xml;charset=gb2312") xh.onreadystatechange=function(){ if(xh.readyState!=4) return var v v=window.Event?xh.responseText:window.gb2utf8(xh.responseBody) alert(v) } window.gb2utf8=function(data){ var glbEncode=[],t,i,j,len gb2utf8_data=data execScript("gb2utf8_data = MidB(gb2utf8_data, 1)+' '", "vbscript") t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2") t=t.split("@") i=0 len=t.length while(++i<len){ j=t[i].substring(0,4) if(!glbEncode[j]) { gb2utf8_char = eval("0x"+j) execScript("gb2utf8_char=Chr(gb2utf8_char)","vbscript") glbEncode[j]=escape(gb2utf8_char).substring(1,6) } t[i]=glbEncode[j]+t[i].substring(4) } gb2utf8_data=gb2utf8_char=null return unescape(t.join("%")).slice(0,-1) } xh.send(null) }
[Ctrl+A全オプション:外部Jsを導入するにはリフレッシュが必要]
ieの下のトランスコードは改善することができて、正則的なコールバック過程を通じて多くの効率を高めることができます
 
  
this.bs2str = function(bs){  
    if(!window.jsMidB) main.vbInit("MidB", 2);  
    if(!window.jsChr) main.vbInit("Chr", 1);  
    if(!bs2str.ss) bs2str.ss = [];  
    return unescape(escape(jsMidB(bs,1)).replace(/(.{2})(.{2})(.{2})/g, "%$3%$2").replace(/%([^0-7].)(.)(.{2})/g, function(a,a1,a2,a3){var s=a1+a3;if(!bs2str.ss[s]) bs2str.ss[s]=jsChr(eval("0x"+s));return bs2str.ss[s];}));  
    } 

しかし、データをロードするにはxmldomのほうがいいと思います.
replace(/(.{2})(.{2})/(.{2})/g,「%$3%$2」)をreplace(/.{2}(.{2})/(.{2})/g,「%$2%$1」)に変更する.従来の3倍以上速い. 
evalを取り除くと効率が向上します
 
  
    // byte() encoding 
    this.bs2str = function(bs){ 
        if(!window.jsMidB) main.vbInit("MidB", 2); 
        if(!window.jsChr) main.vbInit("Chr", 1); 
        if(!this.bs2str.ss) this.bs2str.ss = []; 
        return unescape(escape(jsMidB(bs,1)).replace(/.{2}(.{2})(.{2})/g, "%$2%$1").replace(/%([^0-7].)(.)(.{2})/g, function(a,a1,a2,a3){var s=a1+a3;if(!This.bs2str.ss[s]) This.bs2str.ss[s]=jsChr("&H"+s);return This.bs2str.ss[s];})); 
    }