当前位置: 首页 > 知识库问答 >
问题:

属性文件中带有Thymeleaf-UTF-8的Spring BootCRUD应用程序

颜修为
2023-03-14

我有一个SpringBoot应用程序。

        <!DOCTYPE html>
        <html xmlns:th="http://www.thymeleaf.org">
        <head>
            <meta charset="utf-8">
        ...
                               <li><label th:text="#{view.age}">
</label><span>25</span></li>
    
    âge:
        
        ...

在属性文件上:

view.age=âge:

但在浏览器上,我看到:

âge:25

âge:

配置文件中:

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver slr = new SessionLocaleResolver();
    slr.setDefaultLocale(Locale.US);
    return slr;
}

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    lci.setParamName("lang");
    return lci;
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(localeChangeInterceptor());
}

关于申请。特性:

    spring.messages.encoding=UTF-8
spring.thymeleaf.encoding=UTF-8

IntelliJ IDEA也被设置为UTF-8

@Override
    protected void configure(HttpSecurity http) throws Exception {

        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();

        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceEncoding(true);

        http.addFilterBefore(encodingFilter, CsrfFilter.class);
..
}

我还试着把放到视图中。年龄=


共有3个答案

有耀
2023-03-14

模板编码将通过配置应用程序工作。属性文件-

spring。百里香。编码=UTF-8

裘安阳
2023-03-14

请尝试在应用程序中设置以下内容。特性:

spring.messages.encoding=UTF-8

请让我知道这是否有用。

顺便说一句:关于类似的主题,还有一个已经有几年历史的线程,SpringBoot-UTF-8在消息中不起作用。财产。

闾丘英悟
2023-03-14

我想你几乎可以。。。只有几个额外的想法。

首先,请注意,只有在配置中没有定义自己的MessageSource并且Spring Boot可以应用默认的消息源自动配置时,spring.messages.encoding属性才会起作用。

如果您定义了MessageSourceIf,则应具有适当的编码(默认情况下为iso-8859-1):

@Bean
public ResourceBundleMessageSource messageSource() {
  ResourceBundleMessageSource messageSource = 
    new ResourceBundleMessageSource();
  messageSource.setBasename("messages"); // Please, set the right value
  messageSource.setDefaultEncoding("UTF-8"); // Set the UTF-8 encoding
  return messageSource;
}

您可以从不同的角度来看待它:如果您还没有这样做,那么在您的配置中包括一个自定义的MessageSource,就像上面描述的那样,也可能是问题的解决方案。

此外,请确保属性文件采用所需的编码:如果使用特定编码打开文件,Intellij可能会保留该编码。尝试使用所需编码重新加载文件,UTF-8,如图所示。请注意,在许多情况下,此过程可能具有破坏性,它将更改属性文件的内容,并且可能需要编辑某些字符。当然,您可以使用正确的编码从头开始重新创建属性文件。

虽然我认为问题与属性文件的编码有关,但您也可以尝试设置为模板配置的thymeleafviewsolver的字符编码,并指示其字符编码和内容类型:

// In the way you have configured the view resolver for Thymeleaf
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
// the rest of your configuration
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

您可以尝试的最后一件事是为属性文件的内容包含转义序列。

通常,当您的属性文件具有默认编码,iso-8859-1,并且您需要使用JDK提供的工具native2ascii时,就会执行此操作:

native2ascii [ inputfile ] [ outputfile ]

请注意,您可能需要两个文件,一个像往常一样用特殊字符在其中编写属性文件,另一个是对第一个文件应用native2ascii命令后获得的转义序列。第二个文件是您需要在Spring中将其配置为i18n资源的文件。

按照同样的思路,如果您似乎正在使用IntelliJ,则可以通过在属性文件的“设置/首选项”对话框的“文件编码”页面上选择相应的复选框来启用透明的本机到ascii转换。这将在引擎盖下处理提供的特殊字符和相应转义序列之间的转换。请查看相关文档。

正如我之前告诉您的,请注意启用此特性将修改您的属性文件,因此请确保有一个备份副本,或者在您将更改提交到源代码控制时将其考虑在内。

 类似资料:
  • 我有一个SpringBoot应用程序。对于Thymeleaf,对于此属性文件: 在控制器上: 在模板上: 但我在浏览器上看到:

  • 问题内容: 这里有两个问题。我有一组通常是带有BOM的UTF-8文件。我想将它们(理想情况下)转换为没有BOM的UTF-8。似乎可以解决这个问题。但是我真的看不到任何有关用法的好例子。这将是处理此问题的最佳方法吗? 同样,如果我们能够处理清楚知道的不同输入编码(看到的ASCII和UTF-16),那将是理想的。看来这一切都是可行的。是否有一种解决方案可以采用任何已知的Python编码并以UTF-8格

  • 我正在尝试在外部tomcat上运行camel应用程序。有2个应用程序。属性文件存在于我的项目中,一个在src/main/resources下,另一个在src/test/resources下。当我使用maven install命令创建war文件时,它使用应用程序。来自src/main/resources的属性文件(这是必需的),但当我在eclipse中使用tomcat启动应用程序时,它正在使用app

  • 然而,这些都无济于事。 仍然没有正确保存字符。

  • 我有一个Spring Boot应用程序,代码需要访问resources文件夹下的一个文件。这是我的申请表。属性文件: 然而,它总是抱怨: 我仔细检查了文件夹my_project/target/classes,以确保文件cert.p12存在。 在代码中,我试图访问该文件: 这个类路径到底是什么?为什么它找不到文件?谢谢

  • 我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。