XMLHttpRequest对象解决中文乱码问题

    在学习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


   二、请求数据乱码

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

     页面端:利用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(“用户名不能为空”);
	     } else {
		 String name = URLDecoder.decode(old,”utf-8”);
	         System.out.println(name);
	         If(name.equals(“zzh”)) {
		     out.println(“用户名[” + name + “]已经存在,请使用其他用户名”);
                 } else{
	             out.println(“用户名[” + name + “]尚未存在,可以使用该用户名”)
                 }
             }
        } finally {
	    out.close();	 
        }
  }

 问题解决原理:

            XMLHttpRequest对象解决中文乱码问题_第1张图片

        即通过encodeURI和URLDecode使得请求中文字符不出现乱码。 综上所述,在XMLHttpRequest使用的5个步骤中添加代码则可以实现解决中文乱码的问题。



你可能感兴趣的:(XMLHttpRequest对象解决中文乱码问题)