Tomcat 9.0.x 配置UTF-8

两个配置

1. 配置过滤器

@WebFilter(
        filterName = "CharacterSetFilter",
        urlPatterns = "/*"
)
public class CharacterSetFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }
}

这时候HTTP传输的编码类型就是UTF-8了,但是浏览器在展示(渲染)响应的数据(如HTML)的时候使用的默认字符集不是UTF-8(通过调用js api: document.characterSet 发现使用的是 windows-1252),还需要在请求头里面告诉浏览器使用什么字符集进行渲染。

2. 添加字符集响应头

方式一(稳妥):

// 在 doGet/doPost 最前面加上
response.setContentType("text/html; charset=utf-8");

方式二(实验成功):
如果在代码里面只指明了ContentType没有指定字符集,在浏览器里面检查发现响应头里面“自动”添加上了字符集。

// 在 doGet/doPost 最前面加上
response.setContentType("text/html");

双重保险

HTML 加上charset=UTF-8
谷歌说,如果HTML没有指明字符集,则从其他地方(比如响应头,或者默认)推断字符集,如果HTML里面指明了字符集则以 HTML 为准。

<head>
	<meta charset="UTF-8">
head>

你可能感兴趣的:(tomcat,servlet,服务器)