You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot国际化(Locale)重音字符显示异常问题解决

解决Spring Boot+Thymeleaf法语重音字符乱码问题

这个问题我之前帮不少开发者解决过,本质就是国际化资源文件的编码配置不匹配导致的——Spring Boot默认用ISO-8859-1读取messages配置文件,而法语的重音字符属于UTF-8编码,两者不兼容就会出现乱码。咱们一步步来修复:

1. 确保国际化资源文件本身是UTF-8编码

首先检查你的messages.fr和messages.en文件的编码格式:

  • 在IDEA/STS这类IDE中,右键文件 → File Encodings,将编码设置为UTF-8,同时勾选Transparent native-to-ascii conversion。这个选项会自动把UTF-8的特殊字符(比如é)转成Unicode转义符(\u00e9),既保证文件存储的兼容性,又能让Spring正确解析。
  • 如果用其他编辑器,一定要选择UTF-8无BOM格式保存,避免额外的编码干扰。

2. 配置Spring Boot强制用UTF-8读取资源文件

Spring Boot默认的ResourceBundleMessageSource会用ISO-8859-1编码读取messages文件,咱们需要在配置文件里手动指定UTF-8:

如果你用application.properties:

# 国际化资源文件基础名(对应messages.en/messages.fr)
spring.messages.basename=messages
# 强制用UTF-8编码读取
spring.messages.encoding=UTF-8
# 开发环境关闭缓存,修改资源文件后立即生效;生产环境可以设为3600(1小时)
spring.messages.cache-duration=-1

如果你用application.yml:

spring:
  messages:
    basename: messages
    encoding: UTF-8
    cache-duration: -1

3. 确认Thymeleaf模板的编码配置

虽然Spring Boot默认Thymeleaf的编码是UTF-8,但还是要做双重确认:

  • 在HTML模板的<head>标签里明确指定字符编码:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  • 可选:在配置文件里显式声明Thymeleaf的编码(防止默认配置被覆盖):
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML5

4. 自定义MessageSource Bean(如果手动配置过的话)

如果你在代码里手动注册了MessageSource Bean,一定要记得设置defaultEncoding:

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    // 关键:设置UTF-8编码
    messageSource.setDefaultEncoding("UTF-8");
    // 生产环境建议开启缓存,提升性能
    messageSource.setCacheSeconds(3600);
    return messageSource;
}

5. 构建工具的编码配置(Maven/Gradle)

如果用Maven或Gradle打包,要确保构建过程中资源文件的编码也是UTF-8:

Maven(pom.xml):

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

Gradle(build.gradle):

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

tasks.withType(ProcessResources) {
    filteringCharset = 'UTF-8'
}

最后验证

做完以上配置后,重启你的Spring Boot应用,切换到法语环境,应该就能正常显示“Créer un compte”这类带重音的内容了。如果还是有问题,可以检查messages.fr文件里的字符是否正确——不要手动输入Unicode转义符,让IDE自动处理即可。

内容的提问来源于stack exchange,提问作者msf6012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:05:49