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
    评论
ajax乱码解决总结 第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的, 第二,utf-8是每个汉字(unicode字符)用3个字节来存储。 第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会出现乱码。 第四,ajax发送数据的时候如果修改 Content-Type 为 application/x-www-form-urlencoded",肯定是用post方式,而“太大的数据往往会出错”是用GET方式发送数据造成的。 第五,用vbscript写的函数是用来把数据转成gbk编码(操作系统默认的编码方式。如果在繁体系统上就是big5之类的编码)的,而不是gb2312,两者的编码字符数量相差3倍左右。 第六,用cookie来发送数据,一是很容易溢出,二是要不停的擦屁股,否则cookie里面的数据在每个http请求(包括图片和脚本请求)中都会被发送。三是并发几个http请求的时候,没有办法指定那个cookie是要发送给那个http请求的。 ------------------------ 用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会正确显示,而送出了GBK编码流的时候就 乱了。解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。 PHP:header('Content-Type:text/html;charset=GB2312'); ASP:Response.Charset("GB2312") JSP:response.setHeader("Charset","GB2312");
当谈到前端面试题八股文时,以下是一些常见的问题及其答案: 1. 简要介绍一下前端开发的基本工作流程。 前端开发的基本工作流程包括需求分析、界面设计、编码实现、调试测试和部署上线。 2. 请解释一下浏览器的工作原理。 浏览器的工作原理主要包括四个步骤:解析HTML生成DOM树、解析CSS生成CSSOM树、合并DOM树和CSSOM树形成渲染树、将渲染树绘制到屏幕上。 3. 什么是跨域?如何解决跨域问题? 跨域是指在同源策略限制下,不同域之间进行资源请求或数据传输的过程。解决跨域问题可以通过代理服务器、JSONP、CORS等方式。 4. 请解释一下闭包的概念及其使用场景。 闭包是指函数可以访问和操作其词法作用域外的变量。闭包常用于创建私有变量、实现模块化等场景。 5. 请简要解释一下事件冒泡和事件捕获。 事件冒泡是指事件从最具体的元素开始触发,然后逐级向上传播至最不具体的元素。事件捕获则相反,是从最不具体的元素开始触发,然后逐级向下传播至最具体的元素。 6. 请解释一下防抖和节流函数的作用及其区别。 防抖函数用于减少触发频率,延迟执行函数。节流函数用于控制函数执行频率,限制单位时间内函数的执行次数。区别在于防抖函数在最后一次触发后会等待一段时间再执行,而节流函数在单位时间内只执行一次。 7. 请解释一下SPA(单页应用)的概念。 SPA是指通过动态加载页面内容并使用前端路由实现页面切换的一种应用模式。整个应用只有一个HTML页面,通过Ajax等技术加载数据并更新页面内容。 这些问题只是前端面试题八股文的一小部分,你可以通过阅读相关的面试题和经验总结来进一步准备。记住,在面试中除了回答问题,也要展示自己的项目经验和解决问题的能力。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值