返回

Spring Boot 一招解决中文乱码!

后端

Spring Boot 中文乱码问题的终结

一、中文乱码的根源

在 Spring Boot 应用中,中文乱码问题往往是由不匹配的字符集引起的。当请求和响应中使用的字符集不同时,中文字符就会出现乱码。

二、终极解决方案

为了彻底解决中文乱码问题,我们需要采取以下综合措施:

1. 引入字符编码过滤器

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <version>2.7.3</version>
</dependency>

这个依赖提供了一个 Tomcat 字符编码过滤器,可以自动将请求和响应的字符集设置为 UTF-8。

2. 设置字符集

在配置类中,使用 @Configuration@Bean 注解设置字符集:

@Configuration
public class CharacterEncodingConfig {

  @Bean
  public FilterRegistrationBean characterEncodingFilter() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new CharacterEncodingFilter());
    registrationBean.addUrlPatterns("/*");
    registrationBean.setOrder(1);
    return registrationBean;
  }

}

3. 设置 HTTP 编码

在控制器中,设置请求和响应的字符集:

@Controller
public class MyController {

  @RequestMapping("/")
  public String index(HttpServletRequest request, HttpServletResponse response) {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    // 返回视图
    return "index";
  }

}

三、常见问题解答

1. 为什么使用 Spring Boot 会出现中文乱码?

因为 Spring Boot 默认不提供字符编码过滤器,需要手动添加。

2. UTF-8 和 GBK 字符集有什么区别?

UTF-8 是国际通用的字符集,支持所有语言,而 GBK 是中文简体字符集,只支持中文。

3. 如何判断请求或响应的字符集?

可以使用 request.getCharacterEncoding()response.getCharacterEncoding() 方法获取。

4. 如果乱码问题仍然存在,该怎么办?

检查代码中是否有其他地方设置了字符集,或者检查服务器或数据库的字符集配置。

5. 如何防止中文乱码问题再次出现?

始终在所有相关的类(配置类、控制器等)中设置字符集,并在开发过程中定期测试中文显示。

结论

通过遵循以上步骤,你可以彻底解决 Spring Boot 应用中的中文乱码问题。告别中文乱码的烦恼,让你的应用更稳定、更易用。