在 Linux 上用 Java 出现中文乱码,通常不是 Java 本身的问题,而是字符编码环境不一致导致的。下面按「原因 → 排查 → 解决」给你一个实用清单。
zh_CN.GBK、C)-Dfile.encodinglocale
正常应看到:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是 UTF-8:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
(可写入 ~/.bashrc 或 /etc/profile)
java -Dfile.encoding=UTF-8 -jar yourapp.jar
或在 JAVA_OPTS 中:
export JAVA_OPTS="-Dfile.encoding=UTF-8"
❌ 错误:
new BufferedReader(new FileReader(file));
✅ 正确:
new BufferedReader(
new InputStreamReader(
new FileInputStream(file), StandardCharsets.UTF_8));
new OutputStreamWriter(
new FileOutputStream(file), StandardCharsets.UTF_8);
new String(bytes, StandardCharsets.UTF_8);
file filename.txt
或:
enca filename.txt
如果是 GBK:
new InputStreamReader(in, "GBK");
echo $LANG
export JAVA_OPTS="-Dfile.encoding=UTF-8"
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
locale 是 UTF-8-Dfile.encoding=UTF-8?useUnicode=true&characterEncoding=UTF-8如果你愿意,可以告诉我:
我可以直接给你对应的一行解决方案。