当前位置: 首页 > 图文教程 > 网络编程 > AJAX技术 > 如何解决远程页面抓取中的乱码问题

AJAX技术
Ajax并不神秘:揭下各种Ajax控件和类库的小裤衩
AJAX技术基础介绍
浏览器跨域获取Lrc歌词数据的解决办法
Ajax Hacks chm文件与源代码 下载
AJAX在Post中文的时候乱码的解决方法
Ajax中要注意的问题
ajax+php中文乱码解决办法
建一个XMLHttpRequest对象池
[js]轻便的XMLHttpRequest应用函数:downloadUrl()
Ajax 无刷新在注册用户名时的应用的代码
发现个AJAX图片浏览器SIMPLEVIEWER
AJAX中同时发送多个请求XMLHttpRequest对象处理方法
Ajax实现无刷新三联动下拉框
Ajax in action 英文版配书源码 下载
ajax视频课件 在线观看地址
强烈推荐 - Ajax 技术资源中心
DWR util.js 学习笔记 整理
Ajax案例集下载:新增分页查询案例(包括《Ajax开发精要》中的两个综合案例) 下载
.NET2.0环境下的Ajax选型和应用(提供Demo源码下载)
AJAX防止页面缓存的代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 58 ::
收藏到网摘: n/a

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