SpringBoot - UTF-8在messages.properties中不起作用

时间:2015-01-23 15:11:57

标签: spring utf-8 thymeleaf

¿问题是什么?

我无法在UTF-8中显示我在messages.properties中收到的消息。

一个例子

<h1 id="logo">Electrónico</h1>

这可行,但是当我尝试使用我的消息来源时

<h1 id="logo" th:text="#{titulo.electronico}">Electrónico</h1>

我得到“Electr nico”而不是Electrónico

这是我的配置

application.properties

spring.messages.encoding=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8

的pom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <start-class>demo.Demo</start-class>
    <java.version>1.7</java.version>
</properties>

演示课程

@SpringBootApplication
public class Demo {

    public static void main(String[] args) {
        SpringApplication.run(Demo.class, args);
    }
}

ServletInitializer.class

@Configuration
public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Demo.class);
    }

    @Bean
    public ServletRegistrationBean h2servletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
        registration.addUrlMappings("/console/*");
        return registration;
    }

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    CharacterEncodingFilter characterEncodingFilter() {
      CharacterEncodingFilter filter = new CharacterEncodingFilter();
      filter.setEncoding("UTF-8");
      filter.setForceEncoding(true);
      return filter;
    }
}

如果您需要有关我的配置的更多信息,我可以编辑它。 感谢。

4 个答案:

答案 0 :(得分:21)

要阅读UTF-8编码中的任何文件,必须先在UTF-8中创建。

使用一些支持编码切换的编辑器。或者从IDE创建具有属性文件的编码选项的文件。例如。 IDEA:http://blog.jetbrains.com/idea/2013/03/use-the-utf-8-luke-file-encodings-in-intellij-idea/

答案 1 :(得分:9)

就我而言,我忘记了messageSource.setDefaultEncoding("UTF-8"),请参阅here

答案 2 :(得分:7)

希望这可以帮助别人。各种code解决方案在我的情况下不起作用,但编辑器设置确实如此。

如果您正在使用intellij,请转到file encoding并将全局和项目编码设置为UTF-8,同样适用于default encoding for properties files并且非常重要 - 请检查Transaparent native-to-ascii conversion

Intellij File Encoding

如果您使用体面的文本编辑器打开文件,您会注意到某些字符是使用其UTF-8版本编写的,例如

  

é-> \ u00E9

在我的情况下,更改没有触发GIT的更改,所以我不得不对文件进行“假”修改,以便进行提交和推送。

答案 3 :(得分:1)

至少在我的情况下,问题出在 messages.properties 文件中。因为 Eclipse(在我的例子中是 STS)默认使用 ISO-8859-1 编码。 enter image description here

因此,只需将其更改为 UTF-8 即可。但是要小心,因为在转换过程中(我是在添加内容后做的)一些字符可以用菱形等符号替换。

enter image description here