温馨提示×

debian tomcat为何乱码了

小樊
43
2026-09-18 14:07:44
栏目: 智能运维

在 Debian 上运行 Tomcat 出现乱码,通常不是 Tomcat 本身“坏了”,而是字符编码不一致导致的。下面按最常见原因 → 排查方法 → 解决方式给你梳理。


一、最常见原因(90% 都在这)

1️⃣ 系统 / 终端编码不是 UTF-8

Debian 默认可能不是 UTF-8(尤其是老系统或最小化安装)。

locale

如果看到:

LANG=C
LC_ALL=

或不是 UTF-8,就会乱码。

✅ 解决:

sudo dpkg-reconfigure locales

en_US.UTF-8zh_CN.UTF-8

然后:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

2️⃣ Tomcat 启动编码不是 UTF-8

Tomcat 默认不一定用 UTF-8。

查看当前编码:

ps aux | grep tomcat

如果没看到:

-Dfile.encoding=UTF-8

✅ 解决(推荐):

编辑:

/etc/default/tomcat9   # 或 tomcat8 / tomcat10

加入:

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

或(systemd):

sudo systemctl edit tomcat9
[Service]
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8"

重启:

sudo systemctl restart tomcat9

3️⃣ 页面 JSP / HTML 编码不一致

JSP 必须明确指定 UTF-8。

✅ JSP 顶部必须有:

<%@ page contentType="text/html;charset=UTF-8" %>

HTML:

<meta charset="UTF-8">

4️⃣ GET 请求参数乱码(URL 中文)

Tomcat 8+ 默认 URI 编码是 UTF-8,但老配置可能不是

编辑:

/etc/tomcat9/server.xml

Connector 加:

<Connector
    port="8080"
    URIEncoding="UTF-8"
    useBodyEncodingForURI="true"
/>

5️⃣ 数据库编码不对

即使 Tomcat 正常,数据库不是 UTF-8 也会乱码。

MySQL 示例:

SHOW VARIABLES LIKE 'character_set%';

应是:

utf8mb4

二、快速自检清单 ✅

locale
ps aux | grep tomcat
cat /etc/default/tomcat9
grep URIEncoding /etc/tomcat9/server.xml

三、如果你愿意,我可以更精准帮你

你可以补充:

  1. 乱码出现在 日志 / 页面 / 数据库 / 控制台
  2. Debian 版本
  3. Tomcat 版本
  4. 是否中文环境

我可以直接给你对应配置文件的最终版本

0