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

 更新时间:2007年03月04日 00:00:00   作者:  
由于平时使用的网页文件基本上都是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];})); 
    }  

相关文章

  • JS实现根据详细地址获取经纬度功能示例

    JS实现根据详细地址获取经纬度功能示例

    这篇文章主要介绍了JS实现根据详细地址获取经纬度功能,涉及javascript与百度地图接口交互进行地址经纬度查询的相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • 用Golang运行JavaScript的实现示例

    用Golang运行JavaScript的实现示例

    这篇文章主要介绍了用Golang运行JavaScript的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • javascript动态加载三

    javascript动态加载三

    首先是通过同步策略来实现模块加载与回调函数之间进行分离,接着是通过异步策略来实现模块加载与回调函数之间进行分离
    2012-08-08
  • js实现json数组分组合并操作示例

    js实现json数组分组合并操作示例

    这篇文章主要介绍了js实现json数组分组合并操作,涉及javascript针对json数组的遍历、判断、添加、赋值等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • javascript实现一个数值加法函数

    javascript实现一个数值加法函数

    这篇文章主要介绍了javascript实现一个数值加法函数,十分的简单实用,方便大家理解javascript,有需要的小伙伴可以参考下。
    2015-06-06
  • Javascript中typeof 用法小结

    Javascript中typeof 用法小结

    JavaScript中的typeof其实非常复杂,他有六种返回的数据类型,它可以用来做很多事情,但同时也有很多怪异的表现.本文列举出了它的多个用法,有需要的小伙伴可以参考下。
    2015-05-05
  • js的offsetleft属性的用法小结

    js的offsetleft属性的用法小结

    本文主要介绍了js的offsetleft属性的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • JavaScript怎么判断图片是否加载完成以便获取其尺寸

    JavaScript怎么判断图片是否加载完成以便获取其尺寸

    需要获取图片的尺寸,就需要在图片加载完成以后才可以,下面有个不错的方法,大家不妨参考下
    2014-05-05
  • 小程序实现层叠卡片滑动效果

    小程序实现层叠卡片滑动效果

    这篇文章主要为大家详细介绍了小程序实现层叠卡片滑动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • javascript从作用域链谈闭包

    javascript从作用域链谈闭包

    这篇文章主要从作用域链谈闭包,闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现,本文针对闭包进行学习,需要的朋友可以参考下
    2015-12-12

最新评论