spring boot 控制台中文乱码本质是java进程、终端环境、日志输出三者编码不一致所致,解决需分清输出方与接收方:先用chcp 65001验证终端是否支持utf-8,再通过-dfile.encoding=utf-8统一jvm编码,最后检查logback的utf-8配置。

Spring Boot 启动后控制台中文显示为方块、问号或乱码字符(如 `æäº›æå`),本质是 Java 进程、终端环境、日志输出三者编码不一致导致的。Windows 系统尤其常见,因为 CMD 默认用 GBK,而 Spring Boot 默认按 UTF-8 输出。快速处理的关键不是逐个试配置,而是分清“谁在输出”和“谁在接收”,再针对性干预。
先确认是不是终端本身的问题
很多乱码其实和 Spring Boot 无关,只是 Windows 终端(CMD/PowerShell)没正确识别 UTF-8。不用改代码或配置文件,直接验证:
- 在 VS Code 终端或 Windows Terminal 中,输入 chcp 65001,回车 —— 这会把当前会话切换成 UTF-8 编码
- 再运行 java -Dfile.encoding=UTF-8 -jar your-app.jar
- 如果中文立刻正常,说明问题出在终端编码,不是应用层
让 PowerShell 一劳永逸支持 UTF-8
VS Code 默认终端是 PowerShell,它比 CMD 对 UTF-8 支持更好,但默认不启用。只需一次配置,以后所有 Spring Boot 项目都生效:
- 在终端中运行:notepad $PROFILE
- 如果提示文件不存在,先执行:New-Item -Path $PROFILE -Type File -Force
- 在打开的记事本里粘贴这一行并保存:[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
- 重启 VS Code 或新开终端,乱码即消失
启动命令加一个参数最省事
如果你用 CMD、bat 脚本或直接命令行启动,不需要改系统设置,加一个 JVM 参数就能解决:
- java -Dfile.encoding=UTF-8 -jar your-app.jar
- 如果是 .bat 文件,写成:java -Dfile.encoding=UTF-8 -jar app.jar
- 这个参数强制 Java 进程内部所有字符串、日志、资源读取都用 UTF-8,覆盖系统默认编码
检查日志框架是否覆盖了控制台输出
有些项目用了 Logback,但 <encoder></encoder> 里没设 charset,或者写了 charset="GBK",会导致日志内容被错误转码:
- 打开 logback-spring.xml 或 logback.xml
- 找到
<encoder></encoder>标签,确保里面有:UTF-8 - 如果没有,加上;如果写的是 GBK 或空着,就改成 UTF-8
- 重启应用,控制台日志输出立刻变正常











