解決遠(yuǎn)程頁面抓取中的亂碼問題?
更新時間:2007年03月04日 00:00:00 作者:
由于平時使用的網(wǎng)頁文件基本上都是gb2312編碼方式,如果通過xmlhttp控件讀取的話,肯定會出現(xiàn)亂碼問題,但是要把所有文件都改成utf-8編碼,操作上比較麻煩。經(jīng)過反復(fù)比較,我找到了相對實(shí)用的解決方法。
ff提供了overrideMimeType方法,可以指定返回值的編碼,所以解決起來比較簡單,只要把這個方法指向gb2312就可以了。對于IE,可以用vbs配合來作編碼轉(zhuǎn)換,用gb2utf8來轉(zhuǎn)換接收到的二進(jìn)制數(shù)據(jù),其中利用到execScript方法來調(diào)用vbs的函數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
ie下的轉(zhuǎn)碼可以改進(jì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];}));
}
不過我還是認(rèn)為載入數(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)換接收到的二進(jìn)制數(shù)據(jù),其中利用到execScript方法來調(diào)用vbs的函數(shù)。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
ie下的轉(zhuǎn)碼可以改進(jìn),通過正則的回調(diào)過程能提高不少效率
復(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];}));
}
不過我還是認(rèn)為載入數(shù)據(jù)用xmldom要好一些
replace(/(.{2})(.{2})(.{2})/g, "%$3%$2") 改成 replace(/.{2}(.{2})(.{2})/g, "%$2%$1") 少一個存儲.比原來的快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];}));
}
相關(guān)文章
javaScript 判斷字符串是否為數(shù)字的簡單方法
javascript在通過parseIn或parseFloat將字符串轉(zhuǎn)化為數(shù)字的過程中,如果字符串中包含有非數(shù)字,那么將會返回NaN,參考下面代碼2009-07-07javascript簡單實(shí)現(xiàn)滑動菜單效果的方法
這篇文章主要介紹了javascript簡單實(shí)現(xiàn)滑動菜單效果的方法,實(shí)例分析了javascript通過對頁面元素與相關(guān)屬性的操作實(shí)現(xiàn)滑動菜單效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07JavaScript 讀URL參數(shù)增強(qiáng)改進(jìn)版版
網(wǎng)上有不少JavaScript 讀 URL 參數(shù)的函數(shù),但沒考慮到 URL 中帶 # 符的情況,我的可以處理這種情況,并使用了點(diǎn)對象寫法,優(yōu)化了些性能。2008-10-10DEDECMS如何為文章添加HOT NEW標(biāo)志圖片
再用織夢建站的時候,常常需要要在列表頁添加前兩天的文章后面添加個new小圖片,那么此功能是怎么實(shí)現(xiàn)的呢,下面通過本文給大家詳解dedecms為文章添加HOT NEW標(biāo)志圖片,需要的朋友可以參考下2015-08-08JS+HTML5 FileReader實(shí)現(xiàn)文件上傳前本地預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了JS+HTML5 FileReader實(shí)現(xiàn)文件上傳前本地預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07js設(shè)計(jì)模式之結(jié)構(gòu)型享元模式詳解
這篇文章主要為大家詳細(xì)介紹了js設(shè)計(jì)模式之結(jié)構(gòu)型享元模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09Firefox中autocomplete="off" 設(shè)置不起作用Bug的解決方法
在實(shí)現(xiàn)補(bǔ)全提示功能時(Suggest),都會給輸入框(Input)元素添加autocomplete屬性,且值設(shè)為off。2011-03-03