温馨提示×

ubuntu下java乱码怎么破

小樊
34
2026-10-12 22:44:38
栏目: 编程语言

在 Ubuntu 下 Java 出现乱码,通常是字符编码不一致(文件、终端、JVM、系统 locale 不匹配)导致的。下面按「最常见 → 最彻底」的顺序给你一套排查与解决方案。


一、先确认系统 locale(最关键)

locale

正常应类似:

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

如果不是 UTF-8,先修复:

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

然后重新登录或重启。


二、运行 Java 时强制指定编码(立竿见影)

java -Dfile.encoding=UTF-8 -jar yourapp.jar

或在代码中显式指定:

new InputStreamReader(System.in, "UTF-8");
new OutputStreamWriter(System.out, "UTF-8");

三、终端乱码(常见于 SSH / 本地终端)

确保终端编码是 UTF-8:

  • GNOME Terminal:
    右键 → 配置文件 → 兼容性 → 编码选 UTF-8
  • SSH 客户端(如 Xshell / SecureCRT): 会话属性 → 字符编码 → UTF-8

测试:

echo "中文测试"

四、文件本身编码不对

查看文件编码:

file -i Test.java

如果不是 UTF-8:

iconv -f GBK -t UTF-8 Test.java > Test_utf8.java

Java 源文件推荐统一用 UTF-8。


五、Tomcat / 服务环境乱码

Tomcat

修改:

bin/catalina.sh

加:

JAVA_OPTS="-Dfile.encoding=UTF-8"

systemd 服务

[Service]
Environment=LANG=zh_CN.UTF-8
Environment=LC_ALL=zh_CN.UTF-8

六、IDE 中乱码(IntelliJ / Eclipse)

  • 文件编码设为 UTF-8
  • JVM 参数加:
-Dfile.encoding=UTF-8

七、终极检查清单 ✅

  • [ ] Ubuntu locale = UTF-8
  • [ ] 终端编码 = UTF-8
  • [ ] Java 启动参数 -Dfile.encoding=UTF-8
  • [ ] 源文件是 UTF-8
  • [ ] 输入输出流指定编码

如果你愿意,可以把具体场景发我(命令行?Web?文件读写?日志?),我可以给你更精确的修复方案。

0 踩