Java中的字符编码,默认为:ISO-8859-1(西方编码)。这种编码方式为单字节码,只支持英文、俄文、葡萄牙文等乱七八糟文,不支持中文。因此,我们需要对JSP页面或者Servlet中进行字符编码集的处理,国际编码(UTF-8)。
- 在JSP页面中把最上方标签中的字符编码ISO-8859-1改为UTF-8即可。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- 在Servlet中我们最常用的是设置下方代码进行解决乱码问题:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
或者是:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
然而,上面这两种是我们最常用的方式,但是在大型项目中,我们写这么多解决字符编码集的代码,是不是所谓“重复性的垃圾代码”?所以,我们最好的解决方法是在项目中写一个处理字符编码的过滤器。(Filter)
下面是字符编码Filter的设置方法:
package com.aaa.filter;
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;
/**
* @Discription 字符编码过滤器
* @author ***
* @company ***
* @date 2017-11-18
**/
public class CharsetEncodingFilter implements Filter {
private static String encoding; // 定义变量接收初始化的值
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 设置字符编码链锁
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
// 初始化
public void init(FilterConfig config) throws ServletException {
// 接收web.xml配置文件中的初始参数
encoding = config.getInitParameter("CharsetEncoding");
}
}
下面为web.xml配置文件中的代码:(跟servlet中的配置文件格式相似)
<filter>
<filter-name>charsetEncodingFilter</filter-name>
<filter-class>com.aaa.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>CharsetEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
filter-mapping中的filter-name必须和上面filter中的filter-name相同。url-pattern为过滤的范围,此处写 /* 代表过滤所有的请求。
使用过滤器来自动过滤我们项目中的每一个参数编码,我们就不用麻烦的为每一个参数进行转码了,一个过滤器解决了所有乱码问题。