我知道,关于属性文件中的编码有很多问题,但我找不到能帮到我的答案,所以我再问一次。
所以我有一个基于Spring 4的项目,使用Java Config和Thymeleaf作为模板引擎。 我想在属性文件中指定一些标签,并使用Thymeleaf的指令#{property.name}读取.html文件中的属性值。
我已经在字符编码过滤器中设置了enconding,我还在messageSource中设置了编码(我使用的是ReloadableResourceBundleMessageSource)。我还在pom.xml中添加了属性: UTF-8
老实说,我不知道我能做错什么。 我没有从stackoverflow回答中找到的东西做的事情:
我没有配置ant / maven native2ascii插件,因为我试图将我的角色(如ó或ł)更改为ascii对应物,几乎所有角色仍然被'??'取代迹象。
我还没有配置maven-resource-plugin,因为我不确定如果所有.properties文件都可用,我为什么要使用它呢?
修改
MessageSource定义:
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource getMessageSource() {
ReloadableResourceBundleMessageSource resource = new ReloadableResourceBundleMessageSource();
resource.setBasenames("/i18n/messages");
resource.setDefaultEncoding("UTF-8");
return resource;
}
WebApp初始化:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
FilterRegistration.Dynamic fr = servletContext.addFilter("encodingFilter",
new CharacterEncodingFilter());
fr.setInitParameter("encoding", "UTF-8");
fr.setInitParameter("forceEncoding", "true");
fr.addMappingForUrlPatterns(null, true, "/*");
}
Maven属性定义 UTF-8 (其他物业)
HTML文件中的引用(锚标记中):
th:href="@{about.html}" th:text="#{navigation.about}"
属性文件是:webapp / i18n / message_en_EN.properties,webapp / i18n / message_pl_PL.properties(两者都由Intellij以UTF-8编码保存)
答案 0 :(得分:1)
好的,问题就在于Thymeleaf。
我使用的是ServletContextTemplateResolver和ThymeleafViewResolvere,我不得不在这两个对象中设置编码:
@Bean(name="templateResolver")
public ServletContextTemplateResolver getServletContextTemplateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("/somepath/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean(name="viewResolver")
public ThymeleafViewResolver getThymeleafViewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(getTemplateEngine());
viewResolver.setOrder(1);
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}