Thymeleaf Spring MVC 的 UTF-8 编码问题

UTF-8 encoding issue with Thymeleaf Spring MVC

我对 UTF-8 字符有疑问。我尝试了很多解决方案,但对我没有任何帮助。我现在拥有的:

仍然而不是润色 ąęłźżńłó 我有 ???????ó 显示在页面上。有什么想法吗?

可惜我没有 web.xml 整个配置使用注释。 我无法控制 Filter classes order - 见can use @Order annotation

使用的技术:Spring Framework 5.1.6,Spring Security 5.1.5,Thymeleaf 3.0.11,Thymeleaf Spring security4 3.0.4,Maven 4,Tomcat 9.

所以这看起来很有补救作用,但是您是否导航到目录结构,右键单击包含您的页面的文件夹,然后选择刷新?

我不知道 IDE 您使用的是什么,但过去我不得不手动进入 Eclipse 并刷新包含静态内容的包。

如果您不这样做,它就不会接受更改。

不幸的是,我必须回答我自己的问题。

要从属性文件中读取 UTF-8 数据,只需使用编码 属性

@Component
@PropertySource(value = "classpath:config/data.properties", encoding = "UTF-8")

基本上帮助的是向 configureViewResolvers 方法添加一些额外的方法调用:

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8"); // <- this was added
        resolver.setForceContentType(true); // <- this was added
        resolver.setContentType("text/html; charset=UTF-8"); // <- this was added
        registry.viewResolver(resolver);
    }

此外,在 configure(HttpSecurity http) 方法中,我更改了向此添加过滤器的方式:

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

        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);

        http.authorizeRequests().anyRequest().anonymous()
        .antMatchers("/login**", "/*.js", "/*.css", "/*.svg" ).permitAll()
        // ... some other config
        .invalidateHttpSession(true)
        .permitAll()
        .and()
        .addFilterBefore(filter, CsrfFilter.class); // <- this was added
    }