Java控制台输出在Windows终端乱码,根源是GBK终端编码与UTF-8 Java环境不匹配;需通过chcp确认代码页,再选择适配GBK的PrintStream设置或切换终端至UTF-8(chcp 65001),并同步配置IDE编码与JVM参数。

Java 控制台输出在 Windows 终端乱码,核心是编码链断裂:Windows CMD 默认用 GBK(代码页 936),而 Java 源文件、字符串字面量、JVM 默认字符集普遍按 UTF-8 处理。两者不匹配,字节流被错误解码,就显示为问号或方块。
确认当前终端编码
打开 CMD 或 PowerShell,执行:
chcp如果显示 活动代码页:936,说明终端正用 GBK;若为 65001,则是 UTF-8 模式。这是所有调整的前提。
让 Java 输出适配 CMD 的 GBK 环境
不改终端,只调 Java 层——适用于已有脚本、不想动运行环境的场景:
立即学习“Java免费学习笔记(深入)”;
- 显式指定
PrintStream编码:System.setOut(new PrintStream(System.out, true, "GBK")); - 对
Scanner输入也需同步处理:Scanner sc = new Scanner(System.in, "GBK"); - 避免依赖
file.encodingJVM 参数,它不控制控制台 I/O,只影响文件读写
让 CMD 主动切到 UTF-8(推荐调试用)
在运行 Java 程序前,先执行:
chcp 65001之后启动 Java 程序,只要源码保存为 UTF-8、无 BOM,且未强制指定其他编码,System.out.println("你好") 就能正常显示。注意:
- 该设置仅对当前 CMD 窗口生效
- 确保终端字体支持 UTF-8(如 Consolas、Lucida Console)
- PowerShell 需额外执行:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
IDE 运行时统一编码(以 IntelliJ IDEA 为例)
IDE 内置终端和运行配置独立于系统 CMD,需分别设置:
- File → Settings → Editor → File Encodings:全局编码设为 UTF-8,Transparent native-to-ascii conversion 勾选
- Run → Edit Configurations → Environment variables:添加
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 - Terminal 设置中,Shell path 后加参数启动 UTF-8 模式(如 PowerShell 加
-ExecutionPolicy Bypass -Command "[Console]::OutputEncoding=[System.Text.Encoding]::UTF8; & %COMSPEC%")


















