web-dev-qa-db-fra.com

Spring Boot - UTF-8 Ne fonctionne pas dans messages.properties

Quel est le problème?

Je ne peux pas afficher en UTF-8 les messages que j'ai reçus dans messages.properties.

Un exemple

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

cela fonctionne bien, mais quand j'essaie d'utiliser ma source de message comme ça

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

J'obtiens "Electr�nico" au lieu d'Electrónico

C'est ma configuration

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>

classe de démonstration

@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;
    }
}

Si vous avez besoin de plus d'informations sur ma configuration, je peux la modifier. Merci.

17
QoP

Pour lire n'importe quel fichier dans le UTF-8 l'encodage doit être créé dans le UTF-8 avant.

Utilisez un éditeur qui prend en charge la commutation d'encodage. Ou créez ce fichier à partir de IDE avec option d'encodage pour les fichiers de propriétés. Par exemple IDEA: http://blog.jetbrains.com/idea/2013/03/use-the-utf -8-luke-file-encodings-in-intellij-idea /

23
Artem Bilan

Dans mon cas, j'ai oublié messageSource.setDefaultEncoding("UTF-8"), voir ici .

13
ropo

Espérons que cela puisse aider les autres. Les diverses solutions code ne fonctionnaient pas dans mon cas, mais les paramètres d'un éditeur l'ont fait.

Si vous utilisez intellij, accédez à file encoding et définissez l'encodage global et de projet sur UTF-8, il en va de même pour le default encoding for properties files et -très important- vérifiez le Transaparent native-to-ascii conversion.

Intellij File Encoding

Si vous ouvrez le fichier avec un éditeur de texte décent, vous remarquerez que certains caractères sont écrits avec leur version UTF-8 tels que

é ->\u00E9

Dans mon cas, le changement n'a pas déclenché de changement pour GIT, j'ai donc dû apporter une "fausse" modification au fichier afin de faire un commit et un Push.

12
Paizo