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

 更新时间:2006年12月22日 00:00:00   作者:  

由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。

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

复制代码 代码如下:

<body></body>
<script>
loadPage("index.htm")
function loadPage(url){
    var xh=window.Event?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
    xh.open("GET",url,true)
    if(window.Event)
        xh.overrideMimeType("text/xml;charset=gb2312")
    xh.onreadystatechange=function(){
        if(xh.readyState!=4)
            return
        var v
        v=window.Event?xh.responseText:window.gb2utf8(xh.responseBody)
        alert(v)
    }
    window.gb2utf8=function(data){
        var glbEncode=[],t,i,j,len
        gb2utf8_data=data
        execScript("gb2utf8_data = MidB(gb2utf8_data, 1)+' '", "vbscript")
        t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2")
        t=t.split("@")
        i=0
        len=t.length
        while(++i<len){
            j=t[i].substring(0,4)
            if(!glbEncode[j]) {
                gb2utf8_char = eval("0x"+j)
                execScript("gb2utf8_char=Chr(gb2utf8_char)","vbscript")
                glbEncode[j]=escape(gb2utf8_char).substring(1,6)
            }
            t[i]=glbEncode[j]+t[i].substring(4)
        }
        gb2utf8_data=gb2utf8_char=null
        return unescape(t.join("%")).slice(0,-1)
    }
    xh.send(null)
}
</script>

相关文章

  • AJAX实现跨域的三种方法(代理,JSONP,XHR2)

    AJAX实现跨域的三种方法(代理,JSONP,XHR2)

    这篇文章主要介绍了AJAX实现跨域的三种方法(代理,JSONP,XHR2)的相关资料,需要的朋友可以参考下
    2016-03-03
  • 添加后台list给前台select标签赋值简单实现

    添加后台list给前台select标签赋值简单实现

    本文为大家介绍下通过添加后台list怎么实现给前台select标签赋值,具体代码如下,感兴趣的朋友可以参考下哈
    2013-07-07
  • Ajax点击不断加载数据列表

    Ajax点击不断加载数据列表

    这篇文章主要介绍了Ajax点击不断加载数据列表的相关资料,需要的朋友可以参考下
    2016-07-07
  • 关于Ajax的疑难杂症详解

    关于Ajax的疑难杂症详解

    这篇文章主要给大家介绍了关于Ajax的疑难杂症,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • ajax实现的提交文章前进行敏感词审核的代码

    ajax实现的提交文章前进行敏感词审核的代码

    在做“文章敏感词汇审核”功能的时候,开始在把“审核”放在插入数据库的时候,后来想有一个功能,能在用户点击“提交”按钮的时候,给一个提示。这样相对“友好”那么点。
    2010-02-02
  • ajax局部刷新实例 (三种方法推荐)

    ajax局部刷新实例 (三种方法推荐)

    下面小编就为大家带来一篇ajax局部刷新实例 (三种方法推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Ajax传递特殊字符的数据如何解决

    Ajax传递特殊字符的数据如何解决

    这篇文章给大家介绍了Ajax传递的数据包含特殊字符时的解决方法,需要的朋友参考下吧
    2017-06-06
  • jQuery中ajax - get() 方法实例详解

    jQuery中ajax - get() 方法实例详解

    在JQuery中可以使用get,post和ajax方法给服务器端传递数据,接下来,通过本篇文章给大家介绍jquery中ajax-get()方法实例详解,有需要的朋友可以参考下
    2015-09-09
  • 使用对象封装ajax重复调用的方法

    使用对象封装ajax重复调用的方法

    在项目中经常用到AJAX调用远程数据,每一次调用,都得写一个ajax方法,这就造成了重复代码过多,可读性也不够强,所以,我一般都是封装起来,需要的时候调用
    2016-01-01
  • 基于h5 ajax实现手机定位(demo)

    基于h5 ajax实现手机定位(demo)

    最近没有项目做,正有朋友请帮忙实现手机定位功能,实现方法有很多种,我是用h5和ajax实现的手机定位,只是个demo,后续还要继续完善的,在此分享给大家,需要的朋友可以参考下
    2015-09-09

最新评论