在 Debian 上遇到 Java 程序乱码(控制台、日志、GUI、文件读写等),基本都是字符编码不一致导致的。下面按「最常见 → 最彻底」的方式给你一套排查与解决思路。
locale
如果看到:
LANG=
LC_ALL=
或者不是 UTF-8,就很可能乱码。
sudo apt install locales
sudo dpkg-reconfigure locales
勾选:
en_US.UTF-8
# 或
zh_CN.UTF-8
然后:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
java -XshowSettings:properties -version 2>&1 | grep encoding
如果看到:
file.encoding = ANSI_X3.4-1968
那就是问题根源。
java -Dfile.encoding=UTF-8 -jar yourapp.jar
在 JAVA_OPTS 或 CATALINA_OPTS 中加:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
如果你是 SSH 连 Debian:
❌ 错误:
new FileInputStream("a.txt");
✅ 正确:
new InputStreamReader(
new FileInputStream("a.txt"),
StandardCharsets.UTF_8
);
new OutputStreamWriter(
new FileOutputStream("a.txt"),
StandardCharsets.UTF_8
);
sudo apt install fonts-wqy-zenhei
java -Dfile.encoding=UTF-8 -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel Yourapp
✅ 系统 locale = UTF-8
✅ java -Dfile.encoding=UTF-8
✅ 终端编码 = UTF-8
✅ 文件读写显式指定 UTF-8
✅ 有中文字体
你可以告诉我:
我可以直接给你“一行命令级”的解决方案。