【编者按】:网学网Ajax为您提供AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法参考,解决您在AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法学习中工作中的难题,参考学习。
很多可能在转摘过程中失真或未经验证就被转摘,真正使用时却不行,也由此决定自己全方位试验一下,努力还是没有白费,虽然最终得出的结果是很简单的,但其过程对于一个新学AJAX的人来说,真是挺累。
欢迎您在使用过程中对新的心得一起跟帖交流,一个思想+一个思想,至少可以产生两个思想。
一、在GET发送时: 方法1:在
asp服务器端用Response.charset="GB2312"界定输出编码给调用客户端
此时客户端不需要做什么转换即可。如下两个文件:
1、客户端JS
复制代码 代码如下:
var xmlHttp;
function createXML(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function startXml(){
createXML();
xmlHttp.onreadystatechange = handleStateChange;
var url="ajaxtext.asp?tm=1&cc"+Math.random();
//var sendContents = ''theinput=''+escape(theinput.value);
var regcode="2abc";
xmlHttp.open("get",url,true);
//regcode="regcode="+regcode;
//xmlHttp.setrequestheader("content-length",regcode.length); //可加可不加
//xmlHttp.setRequestHeader("Cache-Control","no-cache");
//xmlHttp.setRequestHeader(''Content-type'',''application/x-www-form-urlencoded''); //可不加
//xmlHttp.send(null);
//xmlHttp.send("regcode="+escape(regcode));
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 && xmlHttp.status==200){
//var divid=document.getElementById("results");
retext=xmlHttp.responseText;
alert(retext);
//if(divid.hasChildNodes()){
// divid.removeChild(divid.childNodes[0]);
//}
//var result=document.createTextNode(xmlHttp.responseText);
//divid.appendChild(result);
//document.getElementById("results").innerHTML=xmlHttp.responseText;
}
}
服务器端:
复制代码 代码如下:
<%Response.CodePage=936%>
<%Response.charset="GB2312"
dim reg
reg=Request("regcode")
Response.write "王先生·和他的朋友" ''可以正确输出。
%>
方法2:在客户端用函数转换(来自网上)。
复制代码 代码如下:
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("%"));
}
此时如果服务器端不指明编码,那么AJAX默认为UTF-8,就不能在客户端显示,用这个函数就可以。
复制代码 代码如下:
retext=xmlHttp.responseText;
retext=gb2utf8(retext);
alert(retext);
3、在火狐浏览器下:具体请参考:下一篇文章
火狐比较简单,他可以支持xmlHttp.responseText;//FireFox,但为了代码简化,建议用上面的直接做好编码。
但如果为了通用,就按POST下面介绍的方法来做吧。
二、在POST发送时:
对于常规的中文,上述的GET方法在POST也是可以的,但网上有一篇文章提到了部分符号不能显示的,比如:下一篇文章中的“test·test+test·”,(中间是间隔号)测试过了,的确在服务器端界定编码