在 Ubuntu 上 Java 出现乱码,一般是字符编码不一致(文件、终端、JVM、字体)导致的。下面按「最常见 → 进阶」给你一套排查与解决方案。
Java 默认编码可能不是 UTF-8,尤其是老版本 JDK。
✅ 运行 Java 时指定编码
java -Dfile.encoding=UTF-8 -jar yourapp.jar
✅ 或编译时也指定
javac -encoding UTF-8 YourFile.java
检查当前编码:
locale
如果不是 UTF-8,执行:
sudo apt install locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
然后重新登录或重启。
测试:
echo "中文测试"
如果不显示:
sudo apt install fonts-noto-cjk
并换用支持 UTF-8 的终端(GNOME Terminal / Konsole)
❌ 错误写法:
new InputStreamReader(inputStream);
✅ 正确写法:
new InputStreamReader(inputStream, StandardCharsets.UTF_8);
文件读写同理:
new BufferedReader(
new InputStreamReader(
new FileInputStream("a.txt"), StandardCharsets.UTF_8));
在配置中明确 UTF-8:
<encoder>
<pattern>%d %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
sudo apt install fonts-wqy-zenhei
Java 启动参数:
java -Dfile.encoding=UTF-8 \
-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel \
YourApp
echo $LANG
locale
java -XshowSettings:properties -version 2>&1 | grep encoding
✅ 运行加:-Dfile.encoding=UTF-8
✅ 系统 locale 是 UTF-8
✅ 安装中文字体
✅ Java 代码里显式指定 UTF-8
如果你愿意,可以告诉我:
java -version)我可以给你精准到命令级的解决方案。