在 Ubuntu 上遇到 Java 乱码(中文乱码、方框、??、问号等),通常是 字符编码不一致 或 缺少中文字体 导致的。下面按常见场景给你一套排查和解决办法。
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 -Dfile.encoding=UTF-8 -jar yourapp.jar
或:
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
new InputStreamReader(in, StandardCharsets.UTF_8);
new String(bytes, StandardCharsets.UTF_8);
⚠️ 不要用 new String(bytes)(默认系统编码)
echo "中文测试"
如果这里就乱码,说明不是 Java 问题。
sudo apt install fonts-wqy-zenhei
sudo apt install fonts-wqy-microhei
Font font = new Font("WenQuanYi Zen Hei", Font.PLAIN, 14);
bin/catalina.sh 加:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
HTML / JSP:
<meta charset="UTF-8">
<%@ page pageEncoding="UTF-8" %>
locale 是 UTF-8-Dfile.encoding=UTF-8如果你能告诉我:
我可以给你更精准的方案。