解決遠程頁面抓取中的亂碼問題?
更新時間:2007年03月04日 00:00:00 作者:
由于平時使用的網(wǎng)頁文件基本上都是gb2312編碼方式,如果通過xmlhttp控件讀取的話,肯定會出現(xiàn)亂碼問題,但是要把所有文件都改成utf-8編碼,操作上比較麻煩。經(jīng)過反復比較,我找到了相對實用的解決方法。
ff提供了overrideMimeType方法,可以指定返回值的編碼,所以解決起來比較簡單,只要把這個方法指向gb2312就可以了。對于IE,可以用vbs配合來作編碼轉(zhuǎn)換,用gb2utf8來轉(zhuǎn)換接收到的二進制數(shù)據(jù),其中利用到execScript方法來調(diào)用vbs的函數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
ie下的轉(zhuǎn)碼可以改進,通過正則的回調(diào)過程能提高不少效率
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];}));
}
不過我還是認為載入數(shù)據(jù)用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];}));
}
ff提供了overrideMimeType方法,可以指定返回值的編碼,所以解決起來比較簡單,只要把這個方法指向gb2312就可以了。對于IE,可以用vbs配合來作編碼轉(zhuǎn)換,用gb2utf8來轉(zhuǎn)換接收到的二進制數(shù)據(jù),其中利用到execScript方法來調(diào)用vbs的函數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
ie下的轉(zhuǎn)碼可以改進,通過正則的回調(diào)過程能提高不少效率
復制代碼 代碼如下:
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];}));
}
不過我還是認為載入數(shù)據(jù)用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];}));
}
相關文章
js獲取鼠標點擊的對象,點擊另一個按鈕刪除該對象的實現(xiàn)代碼
下面小編就為大家?guī)硪黄猨s獲取鼠標點擊的對象,點擊另一個按鈕刪除該對象的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05
JavaScript基于inquirer封裝一個控制臺文件選擇器
這篇文章主要介紹了JavaScript基于inquirer封裝一個控制臺文件選擇器,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
獲取offsetTop和offsetLeft值的js代碼(兼容)
offsetTop和offsetLeft的值在某些特殊的情況下是會使用到的,為了實現(xiàn)值的準確獲取,本文采用js代碼實現(xiàn)下,有需求的朋友可以參考下哈2013-04-04
JS?中的類Public,Private?和?Protected詳解
這篇文章主要介紹了JS中的類Public,Private和Protected詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08

