又见JavaWeb的中文乱码

简单翻了一下记录,我已经写了至少4篇关于编码和乱码的博客了,每次都觉得自己懂了。

实际上,这次的遭遇证明了“真懂”是一种很难达到的境界,吾辈仍需努力!

一、背景是这样子的:

1.一个J2EE项目。
2.项目的.java文件编码设置为utf-8。
3.项目的.jsp文件编码设置为utf-8。

事实上以上设置和程序运行过程中动态产生的编码和乱码没有关系。

二、乱码来了:

1.jsp调用ajax,以POST的方式向控制层传参数(有中文)。
2.ajax提交数据的编码方式为utf-8。
3.SpringMVC的接收数据的编码方式为utf-8。

然而从控制层打印出来的中文编码显示其为gbk编码!

三、判断:

1.抓HTTP请求的数据包,确认浏览器发出来的数据编码是utf-8。
2.用HttpServletRequest取二进制码流,确认此时收到的数据编码是utf-8。
3.为啥用SpringMVC的注解 @RequestBody一格式化,就变成gbk了呢?

所有的注意力都成功的被SpringMVC误导过去了,各种检查自己的SpringMVC的配置。确认自己的配置没有问题。

四、还有谁?

还有tomcat!也许确切的说,还有tomcat的servlet!

在SpringMVC处理之前,是tomcat先接收的码流。检查tomcat的编码,确实是gbk。

想起来了,之所以这么头疼,是因为以前的tomcat默认编码是iso-8859-1,而这个可以很轻松的转成utf-8,而gbk不能!

五、解决:

在catalina.bat的最前面加入set JAVA_OPTS=-Dfile.encoding=UTF-8

大多数的纠结,往往换了都是简单的配置,或者非常不起眼的一行代码。

这也许就是于细微之中见功力?学海无涯……

时间: 2024-08-05 12:51:49

又见JavaWeb的中文乱码的相关文章

JavaWeb解决中文乱码

1.Get请求,方案有两种 A:修改Tomcat配置文件 server.xml   URIEncoding="UTF-8" 如:<Connector port="8081" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8445" URIEncoding="U

JavaWeb的各种中文乱码终极解决方法

一.Servlet输出乱码 1. 用servlet.getOutStream字节流输出中文,假设要输出的是String str ="钓鱼岛是中国的,无耻才是日本的". 1.1 若是本地服务器与本地客户端这种就不用说了,直接可以out.write(str.getBytes())可以输出没有问题.因为服务器中用str.getBytes()是采用默认本地的编码,比如GBK.而浏览器也解析时也用本地默认编码,两者是统一的,所以没有问题. 1.1 若服务器输出时用了, out.write(str

JavaWeb的各种中文乱码解决方法

一.Servlet输出乱码 1. 用servlet.getOutStream字节流输出中文,假设要输出的是String str ="钓鱼岛是中国的,无耻才是日本的". 1.1 若是本地服务器与本地客户端这种就不用说了,直接可以out.write(str.getBytes())可以输出没有问题.因为服务器中用str.getBytes()是采用默认本地的编码,比如GBK.而浏览器也解析时也用本地默认编码,两者是统一的,所以没有问题. 1.1 若服务器输出时用了, out.write(str

javaweb解决post和get请求方式中文乱码问题(通用)

添加一个过滤器,解决乱码问题,代码如下: 1 import java.io.IOException; 2 import java.io.UnsupportedEncodingException; 3 import java.util.Map; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet

【Filter】CharacterEncodingFilter解决JavaWeb项目POST提交造成的中文乱码

import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public cla

JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题

本文主要讲springMVC中视图和控制器之间常用的两种传递参数的方式: 1.JQuery 2.JSON 一.JQuery方式 思路:单击按钮后,触发JQuery事件,而提交整个表单 JSP中 <script type="text/javascript"> function addUser(){ var form=document.form[0]; form.action="/springMVC/user/data/addUser"; form.meth

JavaWeb之response响应中文乱码问题

response向页面响应中文乱码问题  字节流 * 有可能乱码,与中文转换成字节数组.浏览器打开的默认字符编码有关 * 解决方式:将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致 response.setHeader("Content-Type", "text/html;charset=utf-8"); response.getOutputStream().write("张三".getBytes("utf-8"

SpringMVC系列(三)JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题

本文主要讲springMVC中视图和控制器之间常用的两种传递参数的方式: 1.JQuery 2.JSON 一.JQuery方式 思路:单击按钮后,触发JQuery事件,而提交整个表单 JSP中 <script type="text/javascript"> function addUser(){ var form=document.form[0]; form.action="/springMVC/user/data/addUser"; form.meth

JavaWeb项目解决中文乱码配置

Java操作数据库可能会存在乱码,一般来说配置一下web.xml就行,不过有些需要配置一下Tomact <!-- 中文乱码配置 --> <filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-p