IE下AJAX中文返回乱码的解决方法

IE不支持overrideMimeType方法,并且只能用一种很蹩脚的方法来解决,此时需要引入一个杂交的函数:   

function  gb2utf8(data) {  
    
var glbEncode = [];  
    gb2utf8_data 
= data;  
    execScript(
"gb2utf8_data = MidB(gb2utf8_data, 1)""VBScript");  
    
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");  
    t
=t.split("@");  
    
var i=0,j=t.length,k;  
    
while(++i<j) {  
        k
=t[i].substring(0,4);  
        
if(!glbEncode[k]) {  
            gb2utf8_char 
= eval("0x"+k);  
            execScript(
"gb2utf8_char = Chr(gb2utf8_char)""VBScript");  
            glbEncode[k]
=escape(gb2utf8_char).substring(1,6);  
        }
  
        t[i]
=glbEncode[k]+t[i].substring(4);  
    }
  
    gb2utf8_data 
= gb2utf8_char = null;  
    
return unescape(t.join("%"));  
}
xmlhttp  =  getXMLHttpRequest();  
var  url  =   " http://cn.astrology.yahoo.com/ " ;;  
xmlhttp.open(
" GET " , url,  true );  
xmlhttp.onreadystatechange 
=   function () {  
if (xmlhttp.readyState == 4)  
    
if (xmlhttp.status == 200)  
        alert(gb2utf8(xmlhttp.responseBody)); 
//注意这里要用responseBody  
}
;  
xmlhttp.send(
null );  
gb2utf8函数直接解析XMLHttpRequest返回的二进制数据,其中要利用execScript方法来执行VBScript的函数。所以说是一个杂交的函数。感谢blueidea论坛 提供的算法。  

虽然有了解决的办法,但形式丑陋,而且不符合web标准。所以应该在编程中尽量避免,如果是开发web应用,应尽量使用UTF
- 8编码,或者在服务端设置正确的编码信息。至于以上范例,有盗取其他网站内容的嫌疑,更是不为提倡。
 

你可能感兴趣的:(Ajax,&,Javascript,ajax,ie,vbscript,xmlhttprequest,function,null)