解决 IDEA 中 Spring Boot 控制台中文乱码问题

2025年 阅读约 13 分钟 开发教程 · 后端开发

适用场景:在 IDEA 中启动 Spring Boot 项目时,控制台输出的中文日志显示为乱码,如 XSS杩囨护鍣ㄥ垵濮嬪寲瀹屾垚。

问题现象

在 IDEA 中启动 Spring Boot 项目时,控制台输出的中文日志全部变成乱码:

2026-05-10 13:42:17 [] [restartedMain] INFO  c.j.f.common.filter.XssFilter - XSS杩囨护鍣ㄥ垵濮嬪寲瀹屾垚

明明项目配置的编码是 UTF-8,IDEA 的设置也是 UTF-8,为什么运行时还会乱码?

问题根源

这个问题和 JDK 18+ Maven 编译乱码 的根源相同:

从 JDK 18 开始,Java 官方修改了控制台输出的默认编码行为。System.out 和 System.err 的编码不再跟随系统区域设置,而是默认使用 UTF-8。但 IDEA 的 Spring Boot 启动配置没有显式设置 -Dstdout.encoding 和 -Dstderr.encoding,导致编码协商不一致。

与 Maven 编译乱码不同的是,Spring Boot 控制台乱码发生在应用运行时,而不是编译时。因此需要在运行配置中设置 VM Options。

方案 1:修改全局默认运行配置(强烈推荐)

这是 IDEA 新版本推荐的全局配置方式,一次设置,所有新项目自动生效。

操作步骤

  1. 点击 IDEA 右上角运行配置下拉框 → 选择 Edit Configurations...
  2. 在弹出的窗口左侧,找到并展开 Edit configuration templates...(在最底部)
  3. 在模板列表中找到 Application(Spring Boot 启动用的就是这个模板)
  4. 在右侧的 VM Options 输入框中粘贴这三个参数:
    -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
  5. 同样地,找到 Maven 模板,也把这三个参数粘贴进去
  6. 点击 Apply → OK
  7. 删除你现有的 Spring Boot 启动配置,重新生成一个(重要!旧配置不会继承新模板)

✅ 这样设置后,所有以后新建的 Spring Boot 项目、所有 Maven 命令都会自动继承这个配置,再也不会有乱码问题。

方案 2:针对单个 Spring Boot 项目临时解决

如果不想改全局配置,只改当前项目:

操作步骤

  1. 点击 IDEA 右上角运行配置下拉框 → Edit Configurations...
  2. 找到你的 Spring Boot 启动配置(就是那个带绿色叶子图标的)
  3. 在 VM Options 输入框中添加同样的三个参数:
    -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
  4. 点击 Apply → OK
  5. 重新启动 Spring Boot 应用

方案 3:终极兜底方案(永远有效)

如果上面的方法还是有问题,直接修改 IDEA 本身的全局 VM Options 文件,这个方法在任何 IDEA 版本都不会变。

操作步骤

  1. 找到你的 IDEA 安装目录:
    D:\soft\devtool\green\idea-2026.1.win\bin
  2. 打开 idea64.exe.vmoptions 文件(注意是 64 位的那个,不要打开 32 位的)
  3. 在文件末尾添加这三行:
    -Dfile.encoding=UTF-8
    -Dstdout.encoding=UTF-8
    -Dstderr.encoding=UTF-8
  4. 保存文件
  5. 完全退出 IDEA,然后重新启动(必须完全退出,不能只是关闭窗口)

✅ 重启后,所有在 IDEA 中运行的 Java 进程(包括 Spring Boot、Maven、JUnit 等)都会自动使用 UTF-8 编码。

三种方案对比

方案 作用范围 持久性 推荐度
方案 1:全局模板配置 所有新建项目 永久生效 ⭐⭐⭐⭐⭐
方案 2:单个项目配置 仅当前项目 当前项目有效 ⭐⭐⭐
方案 3:修改 vmoptions 所有 IDEA 内 Java 进程 永久生效 ⭐⭐⭐⭐

验证方法

配置完成后,重新启动 Spring Boot 应用,观察控制台输出:

2026-05-10 13:42:17 [] [restartedMain] INFO  c.j.f.common.filter.XssFilter - XSS过滤器初始化完成

中文正常显示,乱码问题解决!

总结

Spring Boot 控制台中文乱码的根本原因是 JDK 18+ 修改了控制台编码默认行为。解决方案和 Maven 编译乱码一样,核心都是配置三个参数:

-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8

区别在于:

  • Maven 编译乱码 → 在 Maven Runner 的 VM Options 中配置
  • Spring Boot 运行乱码 → 在 Application 运行配置的 VM Options 中配置

最佳实践:直接使用方案 1 修改全局模板配置,一次设置,所有项目终身受益。