ajax中文乱码解决方案

jax中要给服务器端传递中文时如果不进行设置,就会出现中文乱码问题。

本人尝试用web中解决中文乱码的方法来解决ajax中的中文乱码问题,

如在servlet中增加request.setCharacterEncoding("UTF-8"),还有增加过滤过滤,发现不起作用。不知道ajax内部对中文编码是怎么转换的。

最后查阅一些相关资料,得到两种比较好用的解决ajax中的中文乱码问题:

 

第一种方法:客户端的javaScript中传递参数时,在参数值之前加上encodeURI()一次(记住这个地方是一次,下面第二种方法是用encodeURI()两次,然后在服务器端获得参数时对参数进行解码,如:Stringold = request.getParameter("name");

String name = newString(old.getBytes("iso8859-1"),"UTF-8");

示例:客户端的javaScript脚本

function verify(){
   $.get("AJAXServer?name="+encodeURI($("#userName").val()),null,functioncallback(data){$("#result").html(data);});
}

服务器端代码:

protected void doGet(HttpServletRequestrequest, HttpServletResponse response) throws ServletException,IOException {
             try{
           response.setContentType("text/html;charset=utf-8");
           PrintWriter out = response.getWriter();

           Integer inte = (Integer)request.getSession().getAttribute("total");
           int temp = 0;
           if (inte == null) {
               temp = 1;
           } else {
               temp = inte.intValue() + 1;
           }
           request.getSession().setAttribute("total",temp);

           //1.取参数
           
String old =request.getParameter("name");

          Stringname = newString(old.getBytes("iso8859-1"),"UTF-8");
           //String name = URLDecoder.decode(old,"UTF-8");
           //2.检查参数是否有问题
           if(old == null || old.length() == 0){
               out.println("用户名不能为空");
           } else{
//               String name = URLDecoder.decode(old,"UTF-8");
//               byte[] by = old.getBytes("ISO8859-1");
//               String name = new String(by,"utf-8");
//               String name = URLDecoder.decode(old,"utf-8");
               //3.校验操作
//               String name = old;
               if(name.equals("admin")){
                   //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户
                   //写法没有变化,本质发生了改变
                   out.println("用户名[" + name + "]已经存在,请使用其他用户名,如 " + name +temp);
               } else{
                   out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册");
               }
           }
       } catch(Exception e){
           e.printStackTrace();
       }
    }

 

第二种方法:客户端的javaScript中传递参数时,在参数值之前加上encodeURI()次(记住这个地方是两次,上面第一种方法是用encodeURI()一次),然后在服务器端获得参数时对参数进行解码,如:Stringold = request.getParameter("name");
String name = URLDecoder.decode(old,"UTF-8");

 

客户端的javaScript脚本代码:

function verify(){
   $.get("AJAXServer?name="+encodeURI(encodeURI($("#userName").val())),null,functioncallback(data){$("#result").html(data);});
}

 

服务器端代码:

protected void doGet(HttpServletRequestrequest, HttpServletResponse response) throws ServletException,IOException {
             try{
           response.setContentType("text/html;charset=utf-8");
           PrintWriter out = response.getWriter();

           Integer inte = (Integer)request.getSession().getAttribute("total");
           int temp = 0;
           if (inte == null) {
               temp = 1;
           } else {
               temp = inte.intValue() + 1;
           }
           request.getSession().setAttribute("total",temp);

           //1.取参数
           String old =request.getParameter("name");
           //String name = newString(old.getBytes("iso8859-1"),"UTF-8");
           String name =URLDecoder.decode(old,"UTF-8");
           //2.检查参数是否有问题
           if(old == null || old.length() == 0){
               out.println("用户名不能为空");
           } else{
//               String name = URLDecoder.decode(old,"UTF-8");
//               byte[] by = old.getBytes("ISO8859-1");
//               String name = new String(by,"utf-8");
//               String name = URLDecoder.decode(old,"utf-8");
               //3.校验操作
//               String name = old;
               if(name.equals("admin")){
                   //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户
                   //写法没有变化,本质发生了改变
                   out.println("用户名[" + name + "]已经存在,请使用其他用户名,如 " + name +temp);
               } else{
                   out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册");
               }
           }
       } catch(Exception e){
           e.printStackTrace();
       }
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值