加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax传值中文乱码问题。。

发布时间:2020-12-16 00:30:03 所属栏目:百科 来源:网络整理
导读:本文转自:http://www.jb51.cc/article/p-dyxzzgqf-ber.html貌似这哥们也是转的。不管了,嘿嘿学习为目的。 AJAX传值时采用的是UTF-8编码格式,客户端中文字符传输到服务器端时,如果服务器编码格式或者所采用的MVC框架的编码格式不是UTF-8,则很可能会出现

本文转自:http://www.52php.cn/article/p-dyxzzgqf-ber.html貌似这哥们也是转的。不管了,嘿嘿学习为目的。

AJAX传值时采用的是UTF-8编码格式,客户端中文字符传输到服务器端时,如果服务器编码格式或者所采用的MVC框架的编码格式不是UTF-8,则很可能会出现中文乱码。解决办法如下:

客户端用js函数encodeURI()对中文字符进行两次编码,服务器端采用URLDecoder类对客户端传输过来的中文字符进行UTF-8格式的解码。示例:

[javascript] view plain copy print ?
  1. $.ajax({
  2. type:"post",
  3. url:"createNewGroup.action",
  4. data:"name="+encodeURI(encodeURI("张三")),
  5. success:function(msg){
  6. alert(msg);
  7. }
  8. });
服务器端代码:
[java] view plain copy print ?
  1. Stringname=URLDecoder.decode("客户端传输过来的中文字符","UTF-8");

服务器端往客户端传输中文字符出现乱码时,服务器端可采用URLEncoder类对中文字符进行UTF-8格式的编码。客户端采用js函数decodeURI()对服务器端传输过的中文字符进行两次解码。

当服务器端传输的是一个json串时,且不可对整个json串进行UTF-8格式的编码(编码后的json串有可能不再具有json原有格式),可采用JsonValueProcessor接口和JsonConfig类对json串中的value进行单独编码。

示例代码:

[java] view plain copy print ?
  1. JsonConfigjsonConfig=newJsonConfig();
  2. jsonConfig.registerJsonValueProcessor(String.class,
  3. newJsonValueProcessor(){
  4. publicObjectprocessArrayValue(Objectvalue,JsonConfigjsonConfig){
  5. returnprocess(value);
  6. }
  7. publicObjectprocessObjectValue(Stringkey,Objectvalue,
  8. JsonConfigjsonConfig){
  9. returnprocess(value);
  10. }
  11. /**
  12. *process
  13. *@paramvalue
  14. *@return
  15. */
  16. publicObjectprocess(Objectvalue){
  17. try{
  18. if(valueinstanceofString){
  19. returnURLEncoder.encode(value.toString(),"UTF-8");
  20. }
  21. returnvalue==null?"":value.toString();
  22. }catch(Exceptione){
  23. return"";
  24. }
  25. }
  26. });
  27. JSONArrayjson=JSONArray.fromObject("[{name:"张三";age:12";sex:"男"}]",
  28. jsonConfig
  29. );//编码后的json串
  30. [java]viewplaincopyprint?
  31. JsonConfigjsonConfig=newJsonConfig();
  32. jsonConfig.registerJsonValueProcessor(String.class,
  33. newJsonValueProcessor(){
  34. publicObjectprocessArrayValue(Objectvalue,JsonConfigjsonConfig){
  35. returnprocess(value);
  36. }
  37. publicObjectprocessObjectValue(Stringkey,
  38. JsonConfigjsonConfig){
  39. returnprocess(value);
  40. }
  41. /**
  42. *process
  43. *@paramvalue
  44. *@return
  45. */
  46. publicObjectprocess(Objectvalue){
  47. try{
  48. if(valueinstanceofString){
  49. returnURLEncoder.encode(value.toString(),"UTF-8");
  50. }
  51. returnvalue==null?"":value.toString();
  52. }catch(Exceptione){
  53. return"";
  54. }
  55. }
  56. });
  57. JSONArrayjson=JSONArray.fromObject("[{name:"张三";age:12";sex:"男"}]",
  58. jsonConfig
  59. );//编码后的json串

客户端使用函数decodeURI()再对json串中的value值进行两次解码即可。


在浏览器端使用XMLHttpRequest对象向服务器端传送中文参数,如果不在浏览器端和服务器端进行处理时,会出现中文乱码问题.针对这种问题,有很多的解决办法,但往往都是在IE下可以正常显示中文,在其他浏览器下(比如FireFox)却仍然是乱码.在FireFox下解决了乱码问题,但回到IE下访问却出现了乱码问题.所以针对要在目前流行的各种浏览器下解决中文乱码问题,才能使编写的Web程序变得通用.
针对这种问题的解决方案,我总结大致有两种:

一,在浏览器端对要传递的中文参数进行编码处理.代码如下:
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对象传递中文参数时,乱码问题可以在任意浏览器下解决,正确显示中文.

原文出处已经不记得了,希望作者能够见谅,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读