温馨提示×

Centos编译Java乱码如何解决

小樊
60
2026-08-30 20:35:24
栏目: 编程语言

CentOS 上编译 Java 出现乱码,通常是 系统字符集、JDK 默认编码、或源码文件编码不一致 导致的。下面按常见场景给你一套排查 + 解决方案


一、先确认问题现象

常见乱码表现:

  • javac 编译时报错信息乱码
  • 编译后的 Java 程序输出中文乱码
  • System.out.println("中文") 显示问号或乱码

二、最常见原因 & 解决方案(重点)

✅ 1. CentOS 系统字符集不是 UTF-8(最常见)

查看当前字符集

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

或重新登录。


✅ 2. Java 编译时未指定 UTF-8(非常常见)

错误方式

javac Hello.java

正确方式 ✅

javac -Dfile.encoding=UTF-8 Hello.java

如果是多文件:

javac -Dfile.encoding=UTF-8 *.java

✅ 3. Java 源文件不是 UTF-8 编码

查看文件编码

file Hello.java

如果不显示 UTF-8,例如是 ISO-8859

iconv -f GBK -t UTF-8 Hello.java -o Hello.java

或重新保存为 UTF-8(无 BOM)


✅ 4. 运行 Java 程序时乱码

解决方式

java -Dfile.encoding=UTF-8 Hello

或在代码中强制:

System.setProperty("file.encoding", "UTF-8");

三、CentOS 7 / 8 特别说明

✅ CentOS 7

默认可能是:

LANG=en_US

必须手动改为 UTF-8。

✅ CentOS 8(已 EOL)

建议迁移到 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

如果你愿意,可以把:

  • CentOS 版本
  • locale 输出
  • java -version
  • 编译命令和报错信息

贴出来,我可以 精确帮你定位是哪一种乱码

0