【发布时间】:2019-10-02 11:13:27
【问题描述】:
我对 UTF-8 字符有疑问。我已经尝试了很多解决方案,但没有什么对我有用。我现在拥有的:
-
Tomcat (server.xml):
<Connector URIEncoding="UTF-8" useBodyEncodingForURI="true" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> -
基础配置类:
public class HomeInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { WebSecurityConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[] { WebMvcConfiguration.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); // forcing UTF-8 filter.setForceEncoding(true); return new Filter[] { filter }; } } -
包含 Thymeleaf 配置的 WebMvcConfiguration 类:
@Bean public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setCharacterEncoding("UTF-8"); // forcing UTF-8 viewResolver.setContentType("text/html; charset=UTF-8"); viewResolver.setOrder(1); viewResolver.setViewNames(new String[] { ".html", ".xhtml" }); return viewResolver; } @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setCharacterEncoding("UTF-8"); // forcing UTF-8 templateResolver.setApplicationContext(applicationContext); templateResolver.setPrefix("/WEB-INF/views/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode(TemplateMode.HTML); templateResolver.setCacheable(true); return templateResolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); templateEngine.setEnableSpringELCompiler(true); return templateEngine; } @Override public void configureViewResolvers(ViewResolverRegistry registry) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); registry.viewResolver(resolver); } -
WebSecurityConfig 包含其余配置:
@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().anonymous().antMatchers("/login**", "/*.js", "/*.css", "/*.svg").permitAll().anyRequest().authenticated() .antMatchers("/login**").permitAll().and().formLogin().loginPage("/login").loginProcessingUrl("/login").usernameParameter("username") .passwordParameter("password").defaultSuccessUrl("/", true).permitAll().and().logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login?logout").deleteCookies("JSESSIONID") .invalidateHttpSession(true).permitAll(); CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); // another forcing UTF-8 filter.setForceEncoding(true); http.addFilterBefore(filter, CsrfFilter.class); } -
所有 html 页面包含:
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /> 在我添加 Thymeleaf 并使用
jsp之前,我已经能够显示特殊字符- 还检查了所有文件 (
.html) 是否使用 UTF-8 编码 - Eclipse 设置已更改以将所有内容保留为 UTF-8
- 可能检查了 stackoverflow 上与此问题相关的所有答案,并验证了所有排名较高的答案(包括 this、this 和 that)
- 已检查 Thymeleaf 消息传递解决方案 (some stack question for that)
- 转义字符
\u0119按原样显示 -\u0119 - 使用相同的
pom.xml、Spring/Thymeleaf 配置创建了新项目
并且仍然而不是波兰语
ąęłźżńłó
我有
???????ó
显示在页面上。有什么想法吗?
很遗憾我没有
web.xml
并且整个配置使用注释。 我无法控制
- 见can use @Order annotationFilter
课程顺序
使用的技术:Spring Framework 5.1.6、Spring Security 5.1.5、Thymeleaf 3.0.11、Thymeleaf Spring security4 3.0.4、Maven 4、Tomcat 9。
【问题讨论】:
标签: java spring utf-8 thymeleaf tomcat9