温馨提示×

centosjava编译乱码为何出现

小樊
34
2026-10-06 06:47:33
栏目: 编程语言

在 CentOS 上用 javac 编译 Java 出现乱码,通常不是 Java 本身的问题,而是字符编码不一致导致的。下面按“原因 → 场景 → 解决办法”来说明。


一、最常见原因:文件编码 ≠ 编译器编码

1️⃣ 源文件是 UTF-8,但 javac 用系统默认编码(如 GBK)

CentOS 默认 locale 可能是:

LANG=zh_CN.UTF-8

或

LANG=C

如果终端或文件编码不匹配,javac 就会:

  • 读错字节
  • 中文变成乱码或编译报错

✅ 解决方式(强烈推荐):

javac -encoding UTF-8 Hello.java

二、CentOS 系统编码问题

2️⃣ 系统 locale 不是 UTF-8

查看:

locale

如果看到:

LANG=C
LC_CTYPE="C"

说明系统用的是 ASCII,Java 中文一定会乱。

✅ 解决:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

或永久修改:

vim /etc/locale.conf
LANG=zh_CN.UTF-8

三、Windows 编写的 Java 文件在 CentOS 编译

3️⃣ Windows 默认 GBK → CentOS UTF-8

现象:

  • 编译报错
  • 中文注释乱码
  • 字符串乱码

✅ 解决:

javac -encoding GBK Hello.java

或转码:

iconv -f GBK -t UTF-8 Hello.java > Hello_utf8.java

四、终端 / SSH 工具编码不一致

4️⃣ 终端不是 UTF-8

比如:

  • SecureCRT
  • Xshell
  • PuTTY

如果终端编码是 GBK,而系统是 UTF-8,也会“看起来像乱码”。

✅ 解决:

  • 终端设置为 UTF-8
  • 系统也用 UTF-8

五、Java 运行期乱码(不是编译期)

如果是:

java Hello

输出乱码,但编译没问题:

✅ 运行也指定编码:

java -Dfile.encoding=UTF-8 Hello

六、Maven / Gradle 项目乱码

Maven

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Gradle

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

七、一句话总结

CentOS 上 Java 编译乱码,99% 是“文件编码 ≠ javac 编码 ≠ 系统 locale”

✅ 通用最佳实践:

# 系统
LANG=zh_CN.UTF-8

# 编译
javac -encoding UTF-8 Xxx.java

# 运行
java -Dfile.encoding=UTF-8 Xxx

如果你愿意,可以把:

  • 报错信息
  • locale
  • file Hello.java

贴出来,我可以精确告诉你哪一步出了问题。

0 踩