在 CentOS 上编译 Java 出现乱码,通常是 系统字符集、JDK 默认编码、或源码文件编码不一致 导致的。下面按常见场景给你一套排查 + 解决方案。
常见乱码表现:
javac 编译时报错信息乱码System.out.println("中文") 显示问号或乱码locale
如果看到:
LANG=en_US
LC_ALL=
或没有 UTF-8,就很可能乱码。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
编辑:
vi /etc/locale.conf
改为:
LANG=en_US.UTF-8
然后:
source /etc/locale.conf
或重新登录。
javac Hello.java
javac -Dfile.encoding=UTF-8 Hello.java
如果是多文件:
javac -Dfile.encoding=UTF-8 *.java
file Hello.java
如果不显示 UTF-8,例如是 ISO-8859:
iconv -f GBK -t UTF-8 Hello.java -o Hello.java
或重新保存为 UTF-8(无 BOM)
java -Dfile.encoding=UTF-8 Hello
或在代码中强制:
System.setProperty("file.encoding", "UTF-8");
默认可能是:
LANG=en_US
必须手动改为 UTF-8。
建议迁移到 Rocky / Alma / CentOS Stream
但编码问题解决方案一致。
locale
java -version
javac -version
运行测试程序:
public class Test {
public static void main(String[] args) {
System.out.println("中文测试");
}
}
输出正常即 ✅。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
写入:
~/.bashrc
| 问题 | 解决方案 |
|---|---|
| 编译乱码 | javac -Dfile.encoding=UTF-8 |
| 系统乱码 | LANG=en_US.UTF-8 |
| 文件乱码 | 转 UTF-8 |
| 运行乱码 | java -Dfile.encoding=UTF-8 |
如果你愿意,可以把:
locale 输出java -version贴出来,我可以 精确帮你定位是哪一种乱码 ✅