ajax 编码问题总结

今天作 asp遇到编码的问题,返回来的中文出现乱码,得知utf-8的问题,在网上搜了些资料,问题解决了。

 

1、在使用"GET"时,服务器端的页面如果返回中文要加上编码类型,例如:

<%
Response.Expires = -9999
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-ctrol","no-cache"
Response.AddHeader "Content-Type","text/html; charset=gb2312"‘这是重点,否则会出现乱码
%>

2、在使用Post时,有位高人用VBscript解决了编码问题:

源码如下:

<script language="VBScript">
Function URLEncoding(vstrIn)
    strReturn = ""
    For i = 1 To Len(vstrIn)
        ThisChr = Mid(vStrIn,i,1)
        If Abs(Asc(ThisChr)) < &HFF Then
            strReturn = strReturn & ThisChr
        Else
            innerCode = Asc(ThisChr)
            If innerCode < 0 Then
                innerCode = innerCode + &H10000
            End If
            Hight8 = (innerCode  And &HFF00)/ &HFF
            Low8 = innerCode And &HFF
            strReturn = strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8)
        End If
    Next
    URLEncoding = strReturn
End Function

Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function
</script>

下面是使用VBScript函数:

<script language=javascript>
  /**
   * 初始化一个xmlhttp对象
   */
  function InitAjax()
  {
   var ajax=false;
   try {
    ajax = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try {
     ajax = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
     ajax = false;
    }
   }
   if (!ajax && typeof XMLHttpRequest!='undefined') {
    ajax = new XMLHttpRequest();
   }
   return ajax;
  }
   function saveUserInfo()
  {
   var msg = document.getElementById("msg");
   var f = document.user_info;
   var userName = f.user_name.value;
   var userAge  = f.user_age.value;
   var userSex  = f.user_sex.value;
   var url = "save.asp";
   var postStr  = URLEncoding("user_name="+ userName +"&user_age="+ userAge +"&user_sex="+ userSex);//Post时采用编码传递

   var ajax = InitAjax();
   ajax.open("POST", url, true);
   ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
   ajax.send(postStr);

   ajax.onreadystatechange = function() {
    if (ajax.readyState == 4 && ajax.status == 200) {
     msg.innerHTML = bytes2BSTR(ajax.responseBody); //获取时解码
    }
   }
  }
  
</script>

<form name="user_info">
 姓名:<textarea name="user_name" /></textarea><br />
 年龄:<input type="text" name="user_age" /><br />
 性别:<input type="text" name="user_sex" /><br />
 <input type="button" value="提交表单" onClick="saveUserInfo()">
</form>
<div id="msg"></div>
成功

另外一位高人写了如下:测试他的源码时是成功的,但是修改后却失败,不知原因,现在把高人的源码贴出来:

<html>
<head>
<title>xml Http</title>
<script language=vbscript>
Function rsB(vIn)
 rsB=MidB(vIn,1)
End Function
Function vbChar(ss)
 vbChar = Chr(ss)
End Function
</script>
<script language=javascript>
//***Author: Hutia
//last modified by shouhaimu(QQ:30836570)
//速度已提高近50倍

//测试用的网址
url="http://www.shenjk.com/";

//**全局变量**
//glbEncode储存ascii到unicode字符的转换,这样做的好处是可以提高重复解码时的解码效率
glbEncode=new Array();

//用同步方式获取网页内容
function loadURL(strURL)
 var xmlHTTP=new ActiveXObject("MSXML2.XMLHTTP");
 xmlHTTP.open("GET",strURL,false);
 xmlHTTP.send("");
 return xmlHTTP;
}

//重编码
function reCode(b){
 var t=rsB(b);
 t=escape(t).replace(/%u/g,"").replace(/(.)(.)/g,"%$2%$1").replace(/%([A-Z].)%(.)/g,"@$1$2");
 t=t.split("@");
 var i=0,j=t.length,k;
 while(++i<j)
 
 return unescape(t.join("%"));
}

function init(){
 stTime1=(new Date()).getTime();
 ree=loadURL(url).responseBody;
 stTime2=(new Date()).getTime();
 s001=reCode(ree);
 stTime3=(new Date()).getTime();
 document.body.innerHTML="共计"+s001.length+"字节/n下载耗时:"+(stTime2-stTime1)+"/n解码耗时:"+(stTime3-stTime2)+"/n"+s001+"";
}
</script>
</head>
<body οnlοad=init()>
下载中...
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值