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

解决|问题|页面

由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。
  ff提供了overrideMimeType方法,可以指定返回值的编码,所以解决起来比较简单,只要把这个方法指向gb2312就可以了。对于IE,可以用vbs配合来作编码转换,用gb2utf8来转换接收到的二进制数据,其中利用到execScript方法来调用vbs的函数。

[复制此代码]CODE:
<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>

时间: 2024-10-01 11:49:40

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

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

由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦.经过反复比较,我找到了相对实用的解决方法. ff提供了overrideMimeType方法,可以指定返回值的编码,所以解决起来比较简单,只要把这个方法指向gb2312就可以了.对于IE,可以用vbs配合来作编码转换,用gb2utf8来转换接收到的二进制数据,其中利用到execScript方法来调用vbs的函数. 复制代码 代码如下:

用javascript解决外部数据抓取中的乱码问题_应用技巧

我们一般会在两个地方用到外部数据抓取,一个是在asp中,一个是在hta中.如果外部数据是gb2312编码的,就涉及到转码的问题,但是传统的用vbs函数进行处理的方法,运算量比较大,有些特殊字符还会出错.    如果用adodb.stream控件来进行转码,就简单多了,不需要借助vbs的二进制处理函数了,同时速度快了很多. 复制代码 代码如下: <script>  function loadData(sUrl){      var xh      xh=new ActiveXObject(&qu

用javascript解决外部数据抓取中的乱码问题

我们一般会在两个地方用到外部数据抓取,一个是在asp中,一个是在hta中.如果外部数据是gb2312编码的,就涉及到转码的问题,但是传统的用vbs函数进行处理的方法,运算量比较大,有些特殊字符还会出错.     如果用adodb.stream控件来进行转码,就简单多了,不需要借助vbs的二进制处理函数了,同时速度快了很多. 复制代码 代码如下: <script>  function loadData(sUrl){      var xh      xh=new ActiveXObject(&q

PHP中使用file_get_contents抓取网页中文乱码问题解决方法_php技巧

本文实例讲述了PHP中使用file_get_contents抓取网页中文乱码问题解决方法.分享给大家供大家参考.具体方法如下: file_get_contents函数本来就是一个非常优秀的php自带本地与远程文件操作函数,它可以让我们不花吹挥之力把远程数据直接下载,但我在使用它读取网页时会碰到有些页面是乱码了,这里就来给各位总结具体的解决办法. 根据网上有朋友介绍说原因可能是服务器开了GZIP压缩,下面是用firebug查看我的网站的头信息,Gzip是开了的,请求头信息原始头信息,代码如下: 复

PHP+Ajax远程图片抓取器下载的例子

  先看效果 实现原理 发送请求 :将输入的目标网址及保存路径名称采用AJAX异步的方式发送到image.info.php文件,该文件中包含有一个ImageCatch类,注意:因为有一个是指定目标图片抓取,一个是只要指定一个网址,如http://www.111cn.net形式,所以还要有一个参数用来判断是指定目标抓取还是指定网站抓取. 接收请求 :接收发送过来的两个参数,目标网址及保存路径,实例化ImageCatch类,将地址及保存路径传进去,用file_get_contents函数将目标地址的

巧用robots文件提升页面抓取率

一.认识robots文件 我们知道,robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的,什么是不可以被查看的,蜘蛛知道了这些以后,就可以将所有的精力放在被我们允许访问的页面上面,从而将有限的权重集中起来. 同时,我们还不能互略最重要的一点就是,robots.txt是搜索引擎访问网站要查看的第一个文件.明白了这一点,我们就有必要,也可能针对这一条做一些文章. 二.将sitemap.xml写入robots文件 前面提到了,robots.txt文件是搜索引擎中访问网站要查看的第一个文

自动将远程页面的文件中的图片下载到本地服务器

服务器|下载|页面 * written by Jaron ,2003-11-12 *//* 原出处:CSDN文档中心 http://www.csdn.net/develop WEB技术中文网 http://www.jaron.cn *//* 转载请注明出处和保留此版权信息 *//* 欢迎使用SiteManager-CMS Server 网站管理系统 http://sitemanager.cnzone.net *//* 自动创建目录,自动将原文件名更名,文件格式的限制以及其他功能的一些优化/* 自

spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据?

问题描述 spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据? spring mvc设置定时器,如何每分钟从前台jsp页面抓取数据?从后台抓取,而不是表单提交的.请知道的回答. 解决方案 用httpclient类.不要表单提交就用gethttp://blog.csdn.net/dj4kobe/article/details/6019650

远程控制-我要做一个远程日志抓取程序

问题描述 我要做一个远程日志抓取程序 我要做一个远程日志抓取程序,有没有哪位可以给我个方案,大概百十台服务器,ubuntu系统,在一台机器上执行程序抓其他所有机器上符合条件的日志 解决方案 http://blog.csdn.net/hljlzc2007/article/details/17411185 解决方案二: http://www.cnblogs.com/brucewoo/archive/2011/12/13/2285482.html 解决方案三: 通过syslog来管理 [http://