Java控制台中文乱码本质是JVM输出编码与终端解码编码不一致:Windows上JVM常默认GBK输出,而IDE或终端用UTF-8解码,导致显示异常;需统一JVM、源文件、编译器及终端编码为UTF-8。

Java 控制台输出中文乱码,本质是“编码链路断了”:JVM 输出字节用的编码,和终端(IDE 控制台或系统命令行)解码时用的编码不一致。Windows 上最常见的是 JVM 默认按 GBK 输出,而 IDEA、VSCode 或 Windows 终端默认按 UTF-8 解码,结果字节被错读,显示成“浣犲ソ”“???”。
确认当前 JVM 编码
别急着改配置,先运行这行代码看实际值:
System.out.println(System.getProperty("file.encoding"));在 Windows 上,大概率输出 GBK 或 Cp936 —— 这就是乱码起点。System.out 会按这个编码把字符串转成字节,后续怎么渲染都救不回来。
代码级强制统一输出编码(推荐)
在 main 方法最开头加三行,一劳永逸绕过 IDE 和环境配置差异:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));
- System.setErr(new PrintStream(System.err, true, StandardCharsets.UTF_8));
- System.setProperty("file.encoding", "UTF-8");
这样 System.out.println("你好") 就会以 UTF-8 字节写出,只要终端支持 UTF-8 渲染(现代 IDE 基本都支持),就能正确显示。JDK 8+ 可直接用 StandardCharsets.UTF_8;老版本可换成字符串 "UTF-8"。
配套确保源文件与编译器也用 UTF-8
光改输出不行。如果 .java 文件本身是 GBK 编码,而 javac 却按 UTF-8 读,编译出的 class 里字符串字面量就错了,后面再怎么输出都是错的:
- 在 IDE 中将源文件另存为 UTF-8 无 BOM 格式(右下角点击编码标识 → “通过编码重新打开” → 选 UTF-8)
- 强制 javac 使用 UTF-8 编译:
• IDEA:Settings → Build → Compiler → Java Compiler → “Default encoding for properties files” 设为 UTF-8
• VSCode:settings.json 中添加 "java.configuration.compilerArgs": ["-encoding", "UTF-8"]
IDE 或终端额外配置(按需补充)
若仍乱码,可能是运行环境未对齐:
- IDEA:File → Settings → Editor → File Encodings → 全部设为 UTF-8;Run → Edit Configurations → VM options 加 -Dfile.encoding=UTF-8
- VSCode:settings.json 加三项:"files.encoding": "utf8"、"java.configuration.compilerArgs"、"vmArgs": "-Dfile.encoding=UTF-8"(写在 launch.json 的 configuration 里)
- Windows 终端:PowerShell/CMD 默认代码页是 936,即使 JVM 输出 UTF-8 字节,终端仍按 GBK 渲染。需在 settings.json 中为终端 profile 添加 "args": ["-NoExit", "-Command", "chcp 65001"],并设置中文字体如 "'Sarasa Mono SC', 'Microsoft YaHei'"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










