在 Ubuntu 下用 Java 编译或运行出现乱码,通常是字符编码不一致导致的(源文件编码、javac 编码、终端编码、程序运行编码不匹配)。下面按常见场景给你解决方案。
通常是 源文件编码 ≠ javac 默认编码
Ubuntu 下 javac 默认使用 系统编码(一般是 UTF-8),但如果源文件是 GBK,就会乱码。
✅ 解决:显式指定编码
javac -encoding UTF-8 Hello.java
如果是 Windows 写的代码(GBK):
javac -encoding GBK Hello.java
通常是 终端编码 ≠ JVM 编码
查看当前终端编码:
locale
正常应是:
LANG=en_US.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是 UTF-8,先修复:
sudo apt install locales
sudo locale-gen zh_CN.UTF-8
export LANG=zh_CN.UTF-8
运行 Java 时指定编码:
java -Dfile.encoding=UTF-8 Hello
在 Ubuntu 打开是乱码(如中文注释看不了)
查看文件编码:
file Hello.java
如果是 ISO-8859 / GBK,可转换:
iconv -f GBK -t UTF-8 Hello.java > Hello_utf8.java
然后:
javac -encoding UTF-8 Hello_utf8.java
File → Settings → Editor → File EncodingsTransparent native-to-ascii conversionWindow → Preferences → General → Workspace✅ 统一使用 UTF-8
javac -encoding UTF-8java -Dfile.encoding=UTF-8LANG=*.UTF-8✅ Maven 项目加配置:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
locale
file YourFile.java
javac -encoding UTF-8 YourFile.java
java -Dfile.encoding=UTF-8 YourClass
如果你愿意,可以把:
locale 输出file xxx.java 结果贴出来,我可以帮你精确判断是 编译乱码 / 运行乱码 / 文件编码问题。