java控制台中文乱码本质是源文件、编译器、jvm、终端四者编码不统一,需全程强制使用utf-8:源文件存为utf-8(无bom),编译加-encoding utf-8,运行加-dfile.encoding=utf-8,终端设为utf-8并配支持字体。

Java 控制台打印中文乱码,本质是编码不一致:源文件、编译器、JVM 和终端(控制台)四者中任一环节用了非 UTF-8 编码,就可能出问题。关键不是“改 Java 代码”,而是统一整个链路的字符编码为 UTF-8。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
确认并设置源文件编码为 UTF-8
你的 .java 文件本身必须保存为 UTF-8 编码(无 BOM)。在编辑器(如 IntelliJ IDEA、VS Code、Notepad++)中检查并转换:
- IntelliJ:File → File Encoding → 设置为 UTF-8,并勾选 “Transparent native-to-ascii conversion”(避免中文被转成 \u4f60\u597d)
- VS Code:右下角点击编码(如 “GBK”),选择 “Save with Encoding” → “UTF-8”
- 记事本:另存为 → 编码选 “UTF-8”(不要选“UTF-8-BOM”)
编译时指定 UTF-8 编码
用 javac -encoding UTF-8 编译,强制编译器按 UTF-8 解析源码: javac -encoding UTF-8 Hello.java 如果不加该参数,javac 默认使用系统平台编码(Windows 常为 GBK),会导致中文字符串字面量解析错误——即使源码是 UTF-8,编译后 class 文件里的字符串已是乱码。
运行时确保 JVM 使用 UTF-8 输出
JVM 默认使用系统默认编码输出到 stdout,需显式指定: java -Dfile.encoding=UTF-8 Hello 这个参数让 System.out.println() 写出的字节流以 UTF-8 编码,但最终能否正常显示,还取决于终端是否能正确解码这些 UTF-8 字节。
终端(控制台)必须支持并启用 UTF-8
这是最容易被忽略的一环:
- Windows CMD:默认用 GBK,不原生支持 UTF-8。临时方案:执行 chcp 65001 切换到 UTF-8 模式(需字体支持,推荐用 Consolas 或 Cascadia Code);更稳方案是改用 Windows Terminal(默认 UTF-8)
- PowerShell:默认 UTF-16,但对 UTF-8 支持较好;可运行 $OutputEncoding = [System.Text.Encoding]::UTF8 确保输出编码
- macOS / Linux 终端:通常默认 UTF-8,检查 locale | grep UTF,确保 LANG 类似 en_US.UTF-8 即可
验证是否真正生效
写个简单测试类,不依赖中文字符串字面量,避免编译环节干扰: System.out.println("你好".getBytes(StandardCharsets.UTF_8).length == 6); // true 表示中文被当作 UTF-8 处理 再直接打印 System.out.println("你好"),观察终端输出是否清晰——若仍乱码,优先排查终端编码和字体。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










