在 Ubuntu 里 Java 出现乱码,通常是字符集不一致或字体缺失导致的。下面按常见场景给你一套“从快到全”的解决方案。
locale
正常应类似:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是 UTF-8,执行:
sudo apt update
sudo apt install locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
然后重启或重新登录。
运行 Java 时强制使用 UTF-8:
java -Dfile.encoding=UTF-8 -jar yourapp.jar
如果是 Tomcat:
export JAVA_OPTS="-Dfile.encoding=UTF-8"
⚠️ Java 18+ 默认已是 UTF-8,老版本(Java 8/11)容易乱码。
确保终端是 UTF-8:
echo "中文测试"
如果这里就乱码,说明不是 Java 的问题。
new InputStreamReader(
new FileInputStream("file.txt"),
StandardCharsets.UTF_8
);
不要写:
new InputStreamReader(in); // 用系统默认编码,容易出错
这是字体缺失问题。
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei
然后重启 Java 程序。
修改:
sudo vim /etc/default/locale
内容:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
并确认:
echo $LANG
-Dfile.encoding=UTF-8如果你能告诉我:
java -version)我可以给你更精准的一行命令解决方案。