Java中Unicode字符正常输出需确保源文件编码、编译编码和运行环境均使用UTF-8,缺一不可;推荐用IDE统一设置、编译时加-encoding UTF-8参数、终端启用UTF-8模式,并可用\uXXXX转义提升兼容性。

Java 中 Unicode 字符能正常输出,关键在于三件事:源文件编码统一为 UTF-8、编译时指定 UTF-8 编码、运行环境(终端/IDE)支持 UTF-8 显示。
确保 Java 源文件保存为 UTF-8
很多编辑器(如 IntelliJ IDEA、VS Code、Eclipse)默认用 UTF-8,但老版本或系统记事本可能存为 GBK 或 ANSI。一旦源码里写了中文、emoji 或其他 Unicode 字符(比如 "你好 ?"),而文件实际是 GBK 编码,编译时就会乱码甚至报错。
操作建议:
- 在 IDE 设置中确认「File Encoding」设为 UTF-8(Project Encoding 和 Default Encoding 都要检查)
- 用记事本打开 .java 文件 → 「另存为」→ 编码选「UTF-8」(不是「UTF-8-BOM」)
- 命令行编译前可用
file -i YourClass.java(Linux/macOS)或chcp+ 查看 BOM 判断编码
编译时显式指定 UTF-8 编码
javac 默认使用系统平台编码(Windows 常为 GBK),容易导致 Unicode 字面量解析失败。必须加 -encoding UTF-8 参数:
立即学习“Java免费学习笔记(深入)”;
javac -encoding UTF-8 Hello.java
如果用 Maven,需在 pom.xml 中配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
运行时控制台能正确显示 Unicode
即使编译成功,终端本身不支持 UTF-8,输出仍是方块或问号。常见情况:
- Windows CMD 默认代码页是 936(GBK),不支持 emoji 或部分汉字。可临时切换:
chcp 65001(启用 UTF-8),但部分旧版 CMD 渲染仍有缺陷 - 推荐改用 Windows Terminal、Git Bash、PowerShell(设置
$OutputEncoding = [System.Text.Encoding]::UTF8)或 IDE 内置 Terminal - IntelliJ / Eclipse 控制台默认支持 UTF-8,但需确认设置:Settings → Editor → File Encodings → Console Encoding = UTF-8
用 Unicode 转义写法更稳妥(适合特殊字符)
对于无法直接输入或易受编辑器干扰的字符(如零宽空格、控制字符、生僻字),可用 \uXXXX 形式:
String s = "Hello\u3000World"; // \u3000 是全角空格System.out.println(s);
注意:\u 转义在编译期就被解析,不受源文件编码影响,所以最稳定。但不可用于代理对(surrogate pairs),如 emoji ?(U+1F602)需写成 \uD83D\uDE02(UTF-16 编码方式)。
不复杂但容易忽略——编码链路(源码→编译→运行)每环都得是 UTF-8,缺一不可。


















