web项目中文乱码问题

1、get请求,参数是放在url中,而request.setCharactEncoding("UTF-8");是仅对消息体有效。

默认是ISO-8859-1编码,通过new String(paramValue.getBytes("ISO-8859-1"),  "UTF-8")自己来转换。


上网查询通过修改Tomcat的server.xml配置文件中<Connector>节点,添加URLEncoding="UTF-8"),测试没成功,还在验证中。


修改server.xml文件<Connector>节点,添加URIEncoding="UTF-8",ok,完美解决问题,Tomcat上部署的所有web项目的编码都将修改。

不是URLEncoding


2、post请求是将参数放在消息体重,通过request.setCharactEncoding("UTF-8");可以解决问题。


如果需要通过out.println()方法输出内容,通过response.setCharacterEncoding("UTF-8")就可以。


2015-12-20晚新加

做项目过程中遇到Tomcat中设置了URIEncoding="UTF-8",测试妹子发现Chrome下是正常,IE传到后台的中文参数老是乱码。也没找到具体原因。使用get请求。

后来采用的解决办法是:对url或参数就行两次encodeURI(encodeURI(url)),后台做一次解码URLDecoder.decode(paramValue, "UTF-8");网上的解释是Tomcat会帮我们做一次解码,他解码采用的估计是iso-8859-1。简单总结为两次转码一次解码


Spring框架开发中配置的设置字符编码也仅对post请求有效。

<filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SetCharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

源代码org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain)

其实也就是执行了request.setCharacterEncoding(this.encoding);

response.setCharacterEncoding(this.encoding);
这两句话也是仅对Post请求有效,就可以理解了。


2016-04-26加

个人测试发现,Tomcat中若不加入URIEncoding="UTF-8" 

使用post请求和get请求都是乱码。

后来Connector节点加上 URIEncoding="UTF-8" ,post请求和get请求就都可以了。

遇到同样问题的可以加上和删掉测试一下。

虽然web.xml中配置了org.springframework.web.filter.CharacterEncodingFilter过滤器,post请求还是不能解决乱码问题。因此无奈只能加上

URIEncoding="UTF-8"。后续会换个电脑再继续验证...

你可能感兴趣的:(中文乱码)