温馨提示×

ubuntu下java编译乱码为啥

小樊
34
2026-10-16 02:38:24
栏目: 编程语言

在 Ubuntu 下 Java 编译出现乱码,通常不是“代码写错了”,而是 字符编码不一致 导致的。下面按最常见原因给你梳理一下。


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

1️⃣ 源文件是 UTF‑8,但 javac 用系统默认编码(可能是 GBK / ANSI)

Ubuntu 默认 locale 有时不是 UTF‑8,或终端不是 UTF‑8。

现象

  • 编译报错:非法字符
  • 或注释、中文变成乱码

✅ 解决方式(强烈推荐)

编译时显式指定编码:

javac -encoding UTF-8 Hello.java

如果是 IDE(IDEA / Eclipse),也要设置:

  • 项目编码:UTF‑8
  • 文件编码:UTF‑8

二、Ubuntu 系统 Locale 不是 UTF‑8

检查当前编码

locale

如果看到:

LANG=C
LC_CTYPE=C

或不是 UTF-8,就容易乱码。

✅ 解决:设置 UTF‑8 Locale

sudo apt install locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

然后重启终端或执行:

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

三、终端 / SSH 客户端编码不对

常见情况

  • Windows 的 Xshell / Putty
  • 终端字体不支持中文

✅ 解决

  • 终端编码设为 UTF‑8
  • 字体使用支持中文的(如 Noto / WenQuanYi)

四、Java 运行输出乱码(不是编译)

如果你说的是 运行时乱码:

System.out.println("中文");

原因

JVM 默认使用系统编码

✅ 解决

运行加参数:

java -Dfile.encoding=UTF-8 Main

五、Windows 写的文件在 Ubuntu 编译

Windows 默认可能是 GBK

检查文件编码

file Hello.java

转换编码

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

六、总结一句话

90% 的 Ubuntu Java 乱码问题,都是因为没统一成 UTF‑8

✅ 统一三处即可:

  1. 源文件:UTF‑8
  2. 编译:javac -encoding UTF-8
  3. 系统/终端:UTF‑8

如果你愿意,可以把:

  • 报错信息
  • locale 输出
  • file 你的.java

贴出来,我可以帮你精准定位。

0 踩