zoukankan      html  css  js  c++  java
  • 前后台传中文参数乱码问题

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

    一、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服务器都会对该方法有很好的支持。

      

  • 相关阅读:
    Heroku
    Git基本命令(转)
    github之从零开发
    物理层、、。。。
    BeautifulSoup, 的使用
    路径设置
    http协议
    Python 的os模块与sys模块
    python 操作MySQL数据库
    多进程记要
  • 原文地址:https://www.cnblogs.com/damoblog/p/9264970.html
Copyright © 2011-2022 走看看