您的位置:首页 > 理论基础 > 计算机网络

XMLHttpRequest对象解决中文乱码问题

2016-01-08 18:20 856 查看
    在学习ajax中XMLHttpRequest对象扩展问题中,XMLHttpRequest可以用来解决web访问中文乱码问题,对此作出总结。

  出现乱码的原因:

 (1)请求数据中包含中文,服务器端程序接受错误导致乱码。

 (2)响应数据中包含中文,编码设置错误导致浏览器中看到的结果是乱码

不论是请求数据还是响应数据,乱码的根源在于设置对外部脚本文件的编码方式,即charset,默认的charset属性是“ISO-8859-1”。

 

解决方案:

   一、响应数据乱码

    保证页面端定义的charset和http响应头的Content-Type中定义的charset一致即可。

    特例:IE6中XMLHttpRequest对象在页面端和http响应头的Content-Type中定义的charset都为GB2312时,中文响应数据出现乱码。解决办法:

   (1)http响应头的Content-Type中charset设置为utf-8

   (2)仅仅使用”MSXML2.XMLHTTP”,”Microsoft.XMLHTTP”这两个中的一个来创建XMLHttpRequest对象。代码如下:

var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; //将其中的对象减少为这两个
for (var i=0; i<activexName.length; i++ ){
try{
var xmlhttp = new ActiveXObject(activexName[i]);
break;
} catch(e) {

}




   二、请求数据乱码

    分别从页面端和服务器端着手:

     页面端:利用javascript中的encodeURI进行两次编码处理

     服务器端:获取到的请求数据通过URLDecode类的decode方法按照utf-8的方式进行decode解码处理。

 

     代码如下:

     页面端:

//回调方法代码
xmlhttp.onreadystatechange = callback;
//记忆一个固定用法,获取文本框中用户输入的内容
var userName = document.getElementById("UserName").value;
//两次encodeURI编码
username = encodeURI(encodeURI(userName));

      服务器端:

Protected void processRequest(HttpServletRequest request, HttpServletResponse response)
Throws ServletException, IOException {
response.setContentType("text/html;charset = utf-8");
printWriter out = response.getWriter();
try{
String old = request.getParameter("name");
If(old == null) {
out.println(“用户名不能为空”);
<span style="white-space:pre">	</span>     } else {
<span style="white-space:pre">	</span> String name = URLDecoder.decode(old,”utf-8”);
System.out.println(name);
If(name.equals(“zzh”)) {
out.println(“用户名[” + name + “]已经存在,请使用其他用户名”);
} else{
out.println(“用户名[” + name + “]尚未存在,可以使用该用户名”)
}
}
} finally {
<span style="white-space:pre">	</span>    out.close();
}
}


 问题解决原理:
            


        即通过encodeURI和URLDecode使得请求中文字符不出现乱码。 综上所述,在XMLHttpRequest使用的5个步骤中添加代码则可以实现解决中文乱码的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: