前后台传中文参数乱码问题

在看乱码问题之前不妨先看下编码的问题

一、js和java中URI的编码和解码(https://i.cnblogs.com/EditPosts.aspx?postid=9237187&update=1)

二、Tomcat在处理POST和GET提交方式时的字符编码问题https://i.cnblogs.com/EditPosts.aspx?postid=9266982&update=1

三、encodeURI来解决URL传递时为什么需要进行两次encodeURI编码(https://www.cnblogs.com/damoblog/articles/9272795.html),

  JAVA:编码与乱码问题(https://www.cnblogs.com/damoblog/articles/9272758.html

四、为什么会乱码

  由于前台在传参数时,前端的页面的编码不确定(可能为utf-8,GBK或者其它)性,

  以至于我们在后台接收参数时不知道所传参数的编码格式,从而导致后台接收参数乱码的情况。

五、怎么解决

  1. ajax的POST请求方式

  (1)post的请求参数在请求体中,前台(客户端)发送请求时必需要设置请求头,

    ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

  (application/x-www-form-urlencoded,是常用的请求头,即form表单语法,详细可以

   参考https://blog.csdn.net/x1005252070/article/details/71055279);

  (2)后台接收参数时,通过request.setCharacterEncoding("UTF-8"),来设置Tomcat接收请求的编码格式,

   并且一定要放在request.getParameter("XXX")。(注意:通过GET方式提交的数据,该设置无效!)

    之前,否则不起作用。这里需要注意的是,使用POST提交方式时,通过设置Tomcat的server.xml文件中的编码时是没有效果的。

  2. ajax的GET请求方式

  (1)get的请求参数是通过URL传递的,所以上面通过request设置的编码格式是不起作用的;这里有一下几种方式去解决

    第一种:可以在每次发生请求之前对URL进行编码,如encodeURI(parameter);

    第二种:通过设置Tomcat的编码方式。(参照:https://blog.csdn.net/shiluyong8068/article/details/78386350

  3. 无论POST或者GET请求可以利用字符去转化处理,如:

String username = request.getParameter("username");
byte[] buf = username.getBytes("ISO8859-1");
username = new String(buf,"UTF-8");

 4. 总结:

  对于POST方法提交的表单,上面的方法3仍然有效,个人建议使用方法3,因为方法3的代码是利用了Java的编码能力,

  对于所有的Web服务器都会有效,而setCharacterEncoding方法是通过Web服务器支持的,并不是所有的Web服务器都会对该方法有很好的支持。

  

猜你喜欢

转载自www.cnblogs.com/damoblog/p/9264970.html