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

  由于平时使用的网页文件基本上都是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>