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

所属分类: 网络编程 / JavaScript 阅读数: 935
收藏 0 赞 0 分享
由于平时使用的网页文件基本上都是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];})); 
    }  
更多精彩内容其他人还在看

Node.js事件的正确使用方法

这篇文章主要给大家介绍了关于Node.js事件的正确使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

微信小程序自定义导航栏实例代码

这篇文章主要给大家介绍了关于微信小程序自定义导航栏的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

js字符串处理之绝妙的代码

这篇文章主要介绍了js字符串处理之绝妙的代码,包括字符串去重、将字符放在对象中遍历拼接出字符串、把字符串的奇数位和偶数位分别提取到两个数组中、将两个数组按奇数位和偶数位插入拼接为字符串,有时候需要对字符进行处理的时候可以用得到
收藏 0 赞 0 分享

vue设计一个倒计时秒杀的组件详解

这篇文章主要介绍了vue设计一个倒计时秒杀的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解服务端预渲染之Nuxt(介绍篇)

这篇文章主要介绍了详解服务端预渲染之Nuxt(介绍篇),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

javascrit中undefined和null的区别详解

这篇文章主要介绍了javascrit中undefined和null的区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈javascript中的prototype和__proto__的理解

这篇文章主要介绍了浅谈javascript中的prototype和__proto__的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解vue中this.$emit()的返回值是什么

这篇文章主要介绍了详解vue中this.$emit()的返回值是什么,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

浅谈express.js框架中间件(middleware)

这篇文章主要介绍了浅谈express.js框架中间件(middleware),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

vue自定义指令directive的使用方法

这篇文章主要介绍了vue自定义指令directive的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多