intellij idea控制台中文乱码的根本原因是编码不一致,需同步调整文件编码、ide全局设置、jvm参数(-dfile.encoding=utf-8)、构建工具配置(maven/gradle)及终端环境五层,缺一不可。

IntelliJ IDEA 控制台中文显示为方块或问号
根本原因是 IDEA 的控制台(Console)编码与项目源文件、JVM 启动参数不一致,常见于 Windows 系统默认 GBK 与 UTF-8 混用。不是改个字体就能解决的。
- 先确认你的
.java文件本身保存为 UTF-8(右下角状态栏查看,点击可切换) - 在
File → Settings → Editor → File Encodings中,把Global Encoding和Project Encoding都设为UTF-8,勾选Transparent native-to-ascii conversion(避免 properties 文件乱码) - 关键一步:打开
Help → Edit Custom VM Options…,添加一行:-Dfile.encoding=UTF-8,然后重启 IDEA - 如果用了 Maven 或 Gradle,还需检查构建工具是否覆盖了编码——Maven 默认用系统编码,建议在
pom.xml里显式配置:<project.build.sourceencoding>UTF-8</project.build.sourceencoding>
运行时 System.out.println() 输出仍是乱码
即使文件和 IDE 编码都设对了,JVM 启动时没指定编码,控制台仍可能用平台默认编码解码输出流。尤其在 Windows 上,cmd 或 PowerShell 默认是 GBK,而 Java 程序按 UTF-8 写入,就会错位。
- 在
Run → Edit Configurations…中,找到对应 Run Configuration,展开Environment variables,添加:JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 - 或者更直接:在同一个配置页中,找到
VM options输入框,填入:-Dfile.encoding=UTF-8(注意这里和 VM Options 文件里的内容是叠加生效的) - 验证方式:写一行
System.out.println("中文");,运行后看控制台是否正常;再加一句System.out.println(System.getProperty("file.encoding"));,确认输出确实是UTF-8 - 如果用的是 Spring Boot,且通过
spring-boot:run启动,上述 VM options 可能不生效,需改在 Maven Runner 配置里设置 JVM 参数
Terminal(内置终端)中文输入/输出异常
IDEA 自带 Terminal 是独立进程,不受 IDE 编码设置影响,它继承的是操作系统终端的编码行为。
- Windows 用户:进
Settings → Tools → Terminal,把Shell path改成cmd.exe /k chcp 65001 >nul(强制启用 UTF-8),或直接换用PowerShell并确保其已执行$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding - macOS/Linux 用户一般无此问题,但若终端 locale 不是 UTF-8,可在
~/.zshrc或~/.bash_profile中确认有:export LANG=en_US.UTF-8(或对应语言的 UTF-8 locale) - 注意:改完 Terminal 设置后需关闭所有已有 Terminal 标签页,新开才生效
Gradle 构建日志或 test 输出乱码
Gradle 默认不完全尊重 IDEA 的 VM 设置,尤其在并行执行或 daemon 模式下,容易复用旧的编码上下文。
- 在
Settings → Build → Build Tools → Gradle中,找到VM options for Gradle,填入:-Dfile.encoding=UTF-8 - 如果用命令行运行 Gradle(比如在 Terminal 里敲
./gradlew build),还需在项目根目录下创建gradle.properties,写入:org.gradle.jvmargs=-Dfile.encoding=UTF-8 - JUnit 测试控制台乱码?检查测试运行配置的
JVM options是否也设置了-Dfile.encoding=UTF-8,别只改主程序的 - Gradle 6.6+ 版本支持
--console=plain或--no-color来规避 ANSI 转义干扰,但本质不解决编码,只是绕开渲染问题
Help → Edit Custom VM Options 和 Gradle 的 gradle.properties 这两处。











