IntelliJ IDEA启动SpringMVC+Tomcat项目俄文显示为问号求助
问题原因
你遇到的乱码问题根源是Thymeleaf视图解析器、模板解析器未显式指定UTF-8编码,Spring MVC默认会使用ISO-8859-1作为响应内容的编码,HTTP响应头的编码优先级高于HTML页面内的meta标签声明,所以俄文会被转成问号。你之前做的IDEA、Tomcat全局编码配置都是正确的,不需要调整。
解决方案
1. 修改SpringConfig中的Thymeleaf配置
修改你现有SpringConfig类里的两个Bean配置,添加编码参数:
- 给
SpringResourceTemplateResolver设置字符编码为UTF-8 - 给
ThymeleafViewResolver设置字符编码和响应Content-Type为UTF-8
修改后的对应代码片段如下:
@Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setApplicationContext(applicationContext); templateResolver.setPrefix("/WEB-INF/"); templateResolver.setSuffix(".html"); // 新增下面这行 templateResolver.setCharacterEncoding("UTF-8"); return templateResolver; } @Override public void configureViewResolvers(ViewResolverRegistry registry) { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); // 新增下面两行 resolver.setCharacterEncoding("UTF-8"); resolver.setContentType("text/html;charset=UTF-8"); registry.viewResolver(resolver); }
2. (可选,若第一步生效可忽略)配置全局字符编码过滤器
如果修改后仍有问题,可以在SpringMvcDispatcherServletInitializer类中添加Spring自带的字符编码过滤器,强制所有请求响应都使用UTF-8编码,代码如下:
@Override public void onStartup(ServletContext servletContext) throws ServletException { CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter(); encodingFilter.setEncoding("UTF-8"); encodingFilter.setForceEncoding(true); servletContext.addFilter("encodingFilter", encodingFilter) .addMappingForUrlPatterns(null, false, "/*"); super.onStartup(servletContext); }
修改完成后重启项目即可解决俄文乱码问题。
内容的提问来源于stack exchange,提问作者Сергей
相关产品推荐
相关产品推荐

