IDEA 中 project encoding 和 file encoding 必须一致:Global Encoding、Project Encoding 及 properties 文件编码均设为 UTF-8,并勾选透明转换;命令行编译需加 -encoding UTF-8;Maven 项目须在 pom.xml 中声明 project.build.sourceEncoding=UTF-8;修改后需清理 target/out 目录并重建。

IDEA 中 project encoding 和 file encoding 必须一致
Java 编译和运行时对源文件编码敏感,javac 默认按系统编码读取 .java 文件。Windows 上常是 GBK,Linux/macOS 是 UTF-8,但现代项目统一用 UTF-8 才能避免中文乱码、编译报错(如 非法字符: '\u3000')。
IntelliJ IDEA 里两个关键设置必须同步:
-
File → Settings → Editor → File Encodings → Global Encoding:设为
UTF-8 -
File → Settings → Editor → File Encodings → Project Encoding:也设为
UTF-8 -
File → Settings → Editor → File Encodings → Default encoding for properties files:若用
.properties,此处也选UTF-8,并勾选Transparent native-to-ascii conversion(否则中文会被自动转成\u4f60\u597d)
命令行编译时显式指定 -encoding 参数
即使 IDE 配好了,用 javac 手动编译仍可能出错——因为 javac 不读取 IDE 配置,它只看系统默认编码或你传的参数。
正确做法是每次编译都加 -encoding UTF-8:
立即学习“Java免费学习笔记(深入)”;
javac -encoding UTF-8 HelloWorld.java
漏掉这个参数,在 Windows 上用 javac HelloWorld.java 编译含中文的源码,大概率报错:
error: unmappable character (0xE4) for encoding GBK
如果项目有多个源文件,建议写个简单脚本或 Makefile 封装该参数,避免遗漏。
Maven 项目需在 pom.xml 中声明 project.build.sourceEncoding
Maven 默认不强制源码编码,它会继承系统编码,导致不同机器上构建结果不一致。CI/CD 流水线尤其容易因此失败。
在 pom.xml 的 块中明确声明:
UTF-8
这个配置会影响:maven-compiler-plugin、maven-resources-plugin、maven-surefire-plugin 等插件的行为。不设的话,mvn compile 可能在某些环境静默使用 GBK,编译通过但运行时报 ClassNotFoundException 或字符串内容异常。
检查并清理已存在的乱码 class 文件
编码配置改完后,旧的 .class 文件可能仍是错误编码生成的,继续运行会复现乱码或逻辑错误(比如 if (name.equals("张三")) 永远不成立)。
务必执行以下操作:
- 删除整个
target/目录(Maven)或out/目录(IDEA 默认输出) - 重新 Build → Rebuild Project
- 验证:用
file -i HelloWorld.class(Linux/macOS)或xxd HelloWorld.class | head粗略确认无异常字节;更直接的是运行时打印字符串的getBytes(StandardCharsets.UTF_8).length,对比预期
这个步骤常被跳过,结果以为配好了,实际还在跑“带伤”的字节码。










