温馨提示×

ubuntu java乱码怎么破

小樊
36
2026-09-10 03:36:09
栏目: 编程语言

在 Ubuntu 上 Java 出现乱码,一般是字符编码不一致(文件、终端、JVM、字体)导致的。下面按「最常见 → 进阶」给你一套排查与解决方案。


一、最常见原因 & 快速解决

1️⃣ JVM 默认编码不是 UTF-8(90% 的原因)

Java 默认编码可能不是 UTF-8,尤其是老版本 JDK。

运行 Java 时指定编码

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

或编译时也指定

javac -encoding UTF-8 YourFile.java

2️⃣ 环境变量没设置 UTF-8

检查当前编码:

locale

如果不是 UTF-8,执行:

sudo apt install locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

然后重新登录或重启。


3️⃣ 终端本身不支持中文

测试:

echo "中文测试"

如果不显示:

sudo apt install fonts-noto-cjk

并换用支持 UTF-8 的终端(GNOME Terminal / Konsole)


二、Java 程序内部处理

4️⃣ 字符串读写必须指定编码

❌ 错误写法:

new InputStreamReader(inputStream);

✅ 正确写法:

new InputStreamReader(inputStream, StandardCharsets.UTF_8);

文件读写同理:

new BufferedReader(
    new InputStreamReader(
        new FileInputStream("a.txt"), StandardCharsets.UTF_8));

5️⃣ 日志乱码(Logback / Log4j)

在配置中明确 UTF-8:

<encoder>
  <pattern>%d %msg%n</pattern>
  <charset>UTF-8</charset>
</encoder>

三、GUI / Swing 乱码(少见但烦)

6️⃣ 字体缺失导致方框

sudo apt install fonts-wqy-zenhei

Java 启动参数:

java -Dfile.encoding=UTF-8 \
     -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel \
     YourApp

四、一键自检脚本(推荐)

echo $LANG
locale
java -XshowSettings:properties -version 2>&1 | grep encoding

五、总结(速查)

✅ 运行加:-Dfile.encoding=UTF-8
✅ 系统 locale 是 UTF-8
✅ 安装中文字体
✅ Java 代码里显式指定 UTF-8


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

  • Java 版本(java -version
  • 乱码场景(控制台 / 文件 / 日志 / GUI)
  • 示例代码片段

我可以给你精准到命令级的解决方案。

0