解决远程页面抓取中的乱码问题?

breadshit

breadshit

2016-02-19 10:35

图老师小编精心整理的解决远程页面抓取中的乱码问题?希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。

  ff提供了overrideMimeType方法,可以指定返回值的编码,所以解决起来比较简单,只要把这个方法指向gb2312就可以了。对于IE,可以用vbs配合来作编码转换,用gb2utf8来转换接收到的二进制数据,其中利用到execScript方法来调用vbs的函数。

[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];})); 
    }  
展开更多 50%)
分享

猜你喜欢

解决远程页面抓取中的乱码问题?

Web开发
解决远程页面抓取中的乱码问题?

如何解决远程页面抓取中的乱码问题

Web开发
如何解决远程页面抓取中的乱码问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Xml Http抓取数据时乱码问题解决

Web开发
Xml Http抓取数据时乱码问题解决

不同页面中调用JS代码乱码问题

Web开发
不同页面中调用JS代码乱码问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

完美解决JS中汉字显示乱码问题(已解决)

Web开发
完美解决JS中汉字显示乱码问题(已解决)

ORACLE 乱码问题的解决

编程语言 网络编程
ORACLE 乱码问题的解决

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MYSQL administrator 使用

MYSQL administrator 使用

mysql常见错误集锦

mysql常见错误集锦
下拉加载更多内容 ↓