前两天工作中,要提取网络上服务器里一个text文档,但是在使用ajax请求后,返回的结果却是一堆乱码,根本无法解决,其布局可如下示例:
也就是通过ajax.html请求ajax.txt文件,因为txt文件在编辑器外面创建,使其编码集非utf-8,则请求后会产生乱码,结果如下:
在通过网上看了无数帖子,看了有通过修改ajax请求时request的编码集,有说通过修改response时的编码级,但最后试完了,下面一个函数可以直接轻松解决:
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)
}
loadPage("ajax.txt");
只需要调用loadPage函数,传入你需要请求的地址,而返回值则会通过alert(v)打印出来。结果如下: