|
ff提供了overrideMimeType方法,可以指定返回值的編碼,所以解決起來(lái)比較簡(jiǎn)單,只要把這個(gè)方法指向gb2312就可以了。對(duì)于IE,可以用vbs配合來(lái)作編碼轉(zhuǎn)換,用gb2utf8來(lái)轉(zhuǎn)換接收到的二進(jìn)制數(shù)據(jù),其中利用到execScript方法來(lái)調(diào)用vbs的函數(shù)。
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
ie下的轉(zhuǎn)碼可以改進(jìn),通過(guò)正則的回調(diào)過(guò)程能提高不少效率
復(fù)制代碼 代碼如下:
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];}));
}
不過(guò)我還是認(rèn)為載入數(shù)據(jù)用xmldom要好一些
replace(/(.{2})(.{2})(.{2})/g, "%$3%$2") 改成 replace(/.{2}(.{2})(.{2})/g, "%$2%$1") 少一個(gè)存儲(chǔ).比原來(lái)的快3倍以上.
把eval去掉,效率還能提高一些
復(fù)制代碼 代碼如下:
// 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];}));
}
JavaScript技術(shù):解決遠(yuǎn)程頁(yè)面抓取中的亂碼問(wèn)題?,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。