get请求与post请求中文乱码问题的解决办法

首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的。

一,get请求参数中文乱码的解决办法

对于get请求解决中文乱码有两种途径

一种是修改tomcat默认的编码方式为"UTF-8"

在tomcat的server.xml里把

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

修改为

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

另一种则是代码层次解决中文乱码,该方式需要前端与后台都要做相应编码

来自页面的一个get请求:

window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));

服务器端:

String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");

因为get请求的参数在请求行上,我们不能像解决post请求那样使用 request.setCharacterEncoding("UTF-8");这种方式是修改方法体的编码方式

所以只能使用以上的方式分别对请求行的汉字进行编码和解码。其实解决get请求中文乱码问题最好的方式是避免使用中文,若带有中文参数尽量使用post请求进行传递。

二,post请求参数中文乱码的解决办法

  对于post请求,请求中问乱码的两种解决办法,就喜闻乐见了。一般也不会有post请求参数中文乱码吧,任何一个java的web项目应该都配置了字符集过滤器。

  (1): request.setCharacterEncoding("UTF-8");

  (2):

     <filter>
        <description>字符集过滤器</description>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <description>字符集编码</description>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
     </filter>
     <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>

posted @ 2018-08-26 21:39  神之殇  阅读(5178)  评论(1编辑  收藏  举报