【问题标题】:SpringBoot - UTF-8 Doesnt work in messages.propertiesSpring Boot - UTF-8 在 messages.properties 中不起作用
【发布时间】:2015-03-22 15:59:13
【问题描述】:

¿有什么问题?

我无法以 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;
    }
}

如果您需要有关我的配置的更多信息,我可以对其进行编辑。 谢谢。

【问题讨论】:

  • 能否请您包含您的 servlet 配置?
  • 您的messages.properties 文件也必须在UTF-8 中创建。
  • @Artem Bilan 我该怎么做?
  • 使用一些支持编码切换的编辑器。或者使用properties 文件的编码选项从IDE 创建该文件。例如。想法:blog.jetbrains.com/idea/2013/03/…
  • @ArtemBilan 谢谢你的帮助,我有同样的问题 message.properties 但我使用了 IDE Eclipse。所以我单击文件中的单击右键,然后转到属性。当打开窗口时,我看到了 文本文件编码,我更改为 UTF-8 并工作了!!

标签: spring utf-8 thymeleaf


【解决方案1】:

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

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

【讨论】:

  • 只是添加更多... 在 linux 中,"file file.properties" 如果错误将返回 ASCII 或 ISO-8559,您可以使用 "iconv -f ISO-8859-1 - t UTF-8 file.properties -o newfile".
  • 出于某种原因,IDEA 阻止更改属性文件的编码...
【解决方案2】:

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

【讨论】:

  • 顺便说一下,它不需要是ReloadableResourceBundleMessageSource。 setDefaultEncoding 在 AbstractResourceBasedMessageSource 中定义,因此也被 ResourceBundleMessageSource 继承。
  • 如果你使用标准的自动配置 MessageSource,Spring Boot 中的默认编码已经是 UTF-8。如果你定义了自己的 MessageSource bean,你只需要设置它,这将阻止自动配置。
【解决方案3】:

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

如果您使用 intellij,请转到 file encoding 并将全局和项目编码设置为 UTF-8,default encoding for properties files 和 - 非常重要 - 检查 Transaparent native-to-ascii conversion 也是如此。

如果你用一个不错的文本编辑器打开文件,你会注意到一些字符是用它们的 UTF-8 版本编写的,例如

é-&gt;\u00E9

在我的情况下,更改并没有触发 GIT 的更改,因此我必须对文件进行“假”修改才能进行提交和推送。

【讨论】:

  • 使用您的解决方案,我的 utf-8 字符显示正确,但是当我提交并推送 git 时,它会损坏(如您的示例)。我该如何解决?
  • 如果我检查“Transaparent native-to-ascii conversion”验证消息并正确显示 utf-8 字符,但在推送 git 后,它们损坏并且其他用户无法工作。
  • 太棒了。这确实帮助我用 IntelliJ IDEA 上的 UTF-8 数据解决了 Spring MVC 项目上的 messages.properties 文件的问题。非常感谢!
  • 注意:é 具有 Unicode 代码点 U+00E9,可以在消息属性中表示为 \u00E9。它在 UTF-16 中编码为 0x00E9,但 在 UTF-8 中是 0xC3A9! unicode-table.com/en/00E9
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-23
    • 2016-12-11
    • 1970-01-01
    • 2014-08-31
    • 2011-04-07
    • 2018-12-02
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多