Java Web项目中,如果使用的是Tomcat服务器的话,在数据交互时,经常会出现深恶痛绝 中文乱码的问题,原因主要可以分为以下两个方面:
1.在JSP页面中,中文根本无法显示。
这种情况下,通常的原因是:
没有把文件头的字符集设置为中文字符集。
解决办法:在文件头上写明如下内容:
<%@ page language="java" pageEncoding="utf-8"%>
或者
<%@ page language="java" contentType="text/html; charset= utf-8"%>
utf-8编码也可以用gb2312字符集替换,这两个都是中文字符集,但一般普遍用utf-8
2.提交过程中显示乱码
提交过程中显示乱码指的是中文字符经过了tomcat服务器之后,在IDE的控制台中、提交到的页面中等处产生的中文乱码
我们一般可以通过url传这个中文参数,看url中的中文参数是否乱码判断是在客户端即浏览器中产生的乱码还是在服务器中产生的乱码
在提交中文数据给服务器,出现中文乱码的原因是:
中文字符在被提交给服务器时,由于服务器会将其默认为ISO-8859-1 编码,而在网页上用的是utf-8或者gb2312编码,不能兼容。
有以下3个解决办法:
(1)直接将中文字符串转成utf-8格式
String name = request.getParameter("stuname");
name = new String(name.getBytes("ISO-8859-1"),"utf-8");
这种方法是直接将这个中文字符串转换成了支持中文的编码,但是这种方法必须对每一个字符串都进行转码,很直接但很麻烦
(2)直接修改request的编码方式
可以将request的编码修改为支持中文的编码方式,这样整个页面中的请求,都可以自动转为中文,
request.setCharacterEncoding("utf-8");
String name = request.getParameter("stuname");
但是一定要注意的是:该方法必须在取出值之前就设置request的编码,并且表单form的提交方式应该是post,并且这种方法必须对每个页面都进行request的设置,也很麻烦
(3)使用过滤器
在大型项目中,如果每一个文件都去设置编码的话,十分繁琐,故在工程中一般使用过滤器解决Tomcat中文乱码问题。
利用过滤器,可以对整个Web应用进行统一的编码过滤,比较方便。
注意:使用过滤器也要求表单提交方式是post,默认不设置的话表单提交方式是get
编写过滤器方法:
首先,建立EncodingFilter的java类,代码如下
package Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "EncodingFilter")
public class EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
然后,配置web.xml
EncodingFilter
Filter.EncodingFilter
EncodingFilter
/*
要注意的是web.xml标签是有一定顺序的,顺序不当会有The content of element type "web-app" must match "报错,
例如,filter等的标签应放在servlet的前面
重新提交并重启,中文乱码问题已成功解决 (也需要表单是post方法才行)