Java中文乱码本质是编码链路断裂,需统一CMD代码页、JVM默认字符集(如设JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8)、源文件UTF-8保存三者,缺一不可。

Java 环境变量配置本身不会直接导致乱码,但若环境变量设置不当(尤其是影响 JVM 启动行为的变量),会引发后续 java、javac 命令执行时中文输出或编译源码时出现乱码。核心问题在于:CMD 终端编码、JVM 默认字符集、Java 源文件编码三者不一致。
确认并统一 CMD 当前代码页
Windows 的 CMD 默认使用 GBK(代码页 936),但某些系统或终端(如新式 Windows Terminal、Git Bash)可能默认为 UTF-8 或其他。若 Java 输出中文乱码,先检查当前代码页:
- 在 CMD 中运行:chcp,查看返回值(如 活动代码页:936)
- 若不是 936,临时修复:输入 chcp 936(GBK)或 chcp 65001(UTF-8)
- 注意:该设置仅对当前窗口生效,关闭即失效
设置 JAVA_TOOL_OPTIONS 环境变量(推荐永久方案)
这是最简洁有效的全局解法,让所有 JVM 进程(包括 java -version、javac、IDE 启动的程序)默认使用 UTF-8 编码处理字符串和 I/O:
- 新建系统环境变量:JAVA_TOOL_OPTIONS
- 变量值设为:-Dfile.encoding=UTF-8
- 重启 CMD 或终端后验证:
java -XshowSettings:properties -version 2>&1 | findstr "file.encoding",应显示 file.encoding = UTF-8
确保源文件保存为 UTF-8(编译环节关键)
即使 JVM 设了 UTF-8,若 .java 文件本身是 GBK 编码保存的,javac 仍可能按默认编码读取,导致编译后字面量乱码:
立即学习“Java免费学习笔记(深入)”;
- 用记事本、VS Code、IDEA 等编辑器打开 .java 文件,另存为时明确选择 UTF-8(无 BOM)
- 编译时可显式指定编码:
javac -encoding UTF-8 Hello.java(临时兜底) - IDE 用户需同步设置项目编码:IntelliJ → File → Settings → Editor → File Encodings;Eclipse → Workspace → Text file encoding
补充:避免 PATH 中混入非标准 JDK 路径
若系统装了多个 JDK(如 OpenJDK + Oracle JDK + JDK 17/21),PATH 中路径顺序错乱可能导致调用到旧版或编码策略不同的 JVM:
- 运行
where java查看实际被调用的 java.exe 路径 - 检查
java -version和javac -version是否一致 - 建议只保留一个主 JDK 的 bin 目录在 PATH 中,其余通过 JAVA_HOME 切换


















