ajax传值中文乱码问题。。
本文转自:http://www.52php.cn/article/p-dyxzzgqf-ber.html貌似这哥们也是转的。不管了,嘿嘿学习为目的。 AJAX传值时采用的是UTF-8编码格式,客户端中文字符传输到服务器端时,如果服务器编码格式或者所采用的MVC框架的编码格式不是UTF-8,则很可能会出现中文乱码。解决办法如下: 客户端用js函数encodeURI()对中文字符进行两次编码,服务器端采用URLDecoder类对客户端传输过来的中文字符进行UTF-8格式的解码。示例:
$.ajax({ type: "post",url: "createNewGroup.action",data:"name="+encodeURI(encodeURI("张三")),success: function(msg){ alert(msg); } });服务器端代码:
String name = URLDecoder.decode("客户端传输过来的中文字符","UTF-8"); 服务器端往客户端传输中文字符出现乱码时,服务器端可采用URLEncoder类对中文字符进行UTF-8格式的编码。客户端采用js函数decodeURI()对服务器端传输过的中文字符进行两次解码。 当服务器端传输的是一个json串时,且不可对整个json串进行UTF-8格式的编码(编码后的json串有可能不再具有json原有格式),可采用JsonValueProcessor接口和JsonConfig类对json串中的value进行单独编码。 示例代码:
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(String.class,new JsonValueProcessor(){ public Object processArrayValue(Object value,JsonConfig jsonConfig) { return process(value); } public Object processObjectValue(String key,Object value,JsonConfig jsonConfig) { return process(value); } /** * process * @param value * @return */ public Object process(Object value) { try { if (value instanceof String) { return URLEncoder.encode(value.toString(),"UTF-8"); } return value == null ?"" : value.toString(); } catch (Exception e) { return ""; } } }); JSONArray json = JSONArray.fromObject("[{name:"张三";age:12";sex:"男"}]",jsonConfig ); //编码后的json串 [java] view plaincopyprint? JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(String.class,new JsonValueProcessor(){ public Object processArrayValue(Object value,JsonConfig jsonConfig) { return process(value); } public Object processObjectValue(String key,JsonConfig jsonConfig) { return process(value); } /** * process * @param value * @return */ public Object process(Object value) { try { if (value instanceof String) { return URLEncoder.encode(value.toString(),"UTF-8"); } return value == null ? "" : value.toString(); } catch (Exception e) { return ""; } } }); JSONArray json = JSONArray.fromObject("[{name:"张三";age:12";sex:"男"}]",jsonConfig ); //编码后的json串 客户端使用函数decodeURI()再对json串中的value值进行两次解码即可。 针对这种问题的解决方案,我总结大致有两种: 一,在浏览器端对要传递的中文参数进行编码处理.代码如下: xmlhttp.open("POST","AjaxServlet",true); //请求参数初始化 xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略) xmlhttp.send("name="+encodeURI(encodeURI("中国"))); //向服务器端发送参数 在服务器端代码: PrintWriter out = response.getWriter(); //得到response的输出流对象 String name1 = request.getParameter("name"); //得到KEY为"name"的请求参数 String name = URLDecoder.decode(name1,"utf-8"); //对得到的参数进行解码 out.print(name); //向浏览器端发送数据 二,43); font-size:14px"> xmlhttp.send("name="+encodeURI("中国")); //向服务器端发送参数 String name = new String((name1.getBytes("ISO-8859-1")),"UTF-8"); //对得到的参数进行解码 以上两种方法,在使用XMLHttpRequest对象传递中文参数时,乱码问题可以在任意浏览器下解决,正确显示中文. 原文出处已经不记得了,希望作者能够见谅, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |