温馨提示×

linux java怎么处理中文乱码

小樊
38
2026-10-24 09:04:48
栏目: 编程语言

在 Linux 上用 Java 出现中文乱码,通常不是 Java 本身的问题,而是字符编码环境不一致导致的。下面按「原因 → 排查 → 解决」给你一个实用清单。


一、常见乱码原因

  1. Linux 系统默认编码不是 UTF-8(如 zh_CN.GBK、C)
  2. Java 启动未指定 -Dfile.encoding
  3. 文件本身是 GBK,但按 UTF-8 读
  4. 终端 / SSH 客户端编码不对
  5. 日志、数据库、网络传输编码不一致

二、先确认系统编码

locale

正常应看到:

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 启动时必须指定编码(非常重要)

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

或在 JAVA_OPTS 中:

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

四、代码中正确处理中文

1️⃣ 读文件(明确指定编码)

❌ 错误:

new BufferedReader(new FileReader(file));

✅ 正确:

new BufferedReader(
    new InputStreamReader(
        new FileInputStream(file), StandardCharsets.UTF_8));

2️⃣ 写文件

new OutputStreamWriter(
    new FileOutputStream(file), StandardCharsets.UTF_8);

3️⃣ 字符串转换

new String(bytes, StandardCharsets.UTF_8);

五、判断文件编码(Linux)

file filename.txt

或:

enca filename.txt

如果是 GBK:

new InputStreamReader(in, "GBK");

六、终端 / SSH 乱码

  • SecureCRT / Xshell / FinalShell
    → 设置为 UTF-8
  • Linux 本地终端:
echo $LANG

七、Tomcat / Spring Boot 额外注意

Tomcat

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

Spring Boot

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

八、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] Java 启动加 -Dfile.encoding=UTF-8
  • [ ] 文件读写指定编码
  • [ ] 终端是 UTF-8
  • [ ] 数据库连接串加 ?useUnicode=true&characterEncoding=UTF-8

如果你愿意,可以告诉我:

  • 是 控制台乱码 / 文件乱码 / 接口返回乱码 / 数据库乱码
  • 用的 JDK 版本 + Linux 发行版

我可以直接给你对应的一行解决方案。

0 踩