thymeleaf中文乱码的根本原因是模板解析器和视图解析器未同时设置utf-8编码;必须在servletcontexttemplateresolver中设setcharacterencoding("utf-8"),并在thymeleafviewresolver中设setcharacterencoding("utf-8"),二者缺一不可。

Thymeleaf 中文乱码不是文件本身没设 UTF-8,而是模板解析和视图渲染两个环节的编码没对齐。只要这两个地方都明确指定 UTF-8,基本就能解决。
模板解析器(TemplateResolver)必须设 UTF-8
这是第一步,也是最容易漏掉的一环。Thymeleaf 读取 HTML 模板时,默认不强制用 UTF-8,即使你 HTML 文件里写了 <meta charset="UTF-8"> 也没用。
- XML 配置方式(Spring MVC):
- Java 配置方式(Spring Boot 或 JavaConfig):
@Bean
public ITemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateMode("HTML");
resolver.setCacheable(false);
return resolver;
}
视图解析器(ThymeleafViewResolver)也要设 UTF-8
模板读进来了,但输出给浏览器时,响应头(Content-Type)可能还是 text/html;charset=ISO-8859-1,浏览器就按拉丁字符解码,中文自然变问号。
- XML 配置中加这一行:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Java 配置中对应设置:
@Bean
public ThymeleafViewResolver viewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateEngine(templateEngine());
return resolver;
}
额外但关键的检查项
光配对 Thymeleaf 还不够,前后端链路要全通:
- 确保 HTML 模板文件本身是 UTF-8 编码保存(IDE 右下角看编码,必要时“Reload as UTF-8”再“Convert to UTF-8”)
- 确认
<meta charset="UTF-8">出现在最前面 - 如果是表单提交中文,
<form accept-charset="UTF-8"></form>别漏掉 - Spring Boot 项目建议在
application.properties加上:
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
Spring Boot 用户可简化配置
如果你用的是 Spring Boot 2.0+,除了上面 Java 配置外,还可以直接在 application.properties 补充:
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
这两项会自动作用于模板解析器和视图解析器,省去手动 Bean 配置,但底层原理不变——仍是保证解析与输出都走 UTF-8。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










