You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Сергей

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:02