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

Spring MVC+Tomcat UTF-8编码异常求助:响应始终为ISO-8859-1

Spring MVC 响应编码异常问题求助

我正在上手Spring MVC开发,遇到了编码异常问题:每次响应头的Content-Type都固定为text/html;charset=ISO-8859-1,导致所有非ASCII字符显示为?。我全程采用纯编程式配置,没有使用任何XML或properties配置文件,已经尝试了以下多种方案,但均无效:

  • 在ConfigDispatcherServletInitializer中添加CharacterEncodingFilter:
@Override
protected Filter[] getServletFilters() {
   // 编码问题处理:添加UTF-8编码过滤器
   CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
   encodingFilter.setForceEncoding(true);
   encodingFilter.setEncoding("UTF-8");
   // 编码过滤器必须放在第一位
   return new Filter[]{encodingFilter,
       new DelegatingFilterProxy("springSecurityFilterChain"),
    };
}
  • 在WebMvcConfigurer中配置消息转换器:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
}
  • 添加StringHttpMessageConverter Bean:
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {
    return new StringHttpMessageConverter(StandardCharsets.UTF_8);
}
  • 设置Thymeleaf ViewResolver的编码:
resolver.setCharacterEncoding("UTF-8");
  • 在WebSecurityConfigurerAdapter中添加编码过滤器:
http.addFilterBefore(new CharacterEncodingFilter("UTF-8", true, true), ChannelProcessingFilter.class);

除此之外,我还在Tomcat运行配置中添加了VM选项-Dfile.encoding=UTF-8,但响应头的字符集依然是ISO-8859-1。

我的本地配置均已设置为UTF-8:

  • 所有文件编码为UTF-8
  • Intellij Idea的"Default encoding for options file"设置为UTF-8
  • Maven编译编码属性配置为<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  • 所有HTML文件都包含编码元标签<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

环境信息:Tomcat 9.0.74、JDK 11、Spring 5.3.27

内容的提问来源于stack exchange,提问作者Blc Dragon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:40:09