在 Debian 上运行 Tomcat 出现乱码,通常不是 Tomcat 本身“坏了”,而是字符编码不一致导致的。下面按最常见原因 → 排查方法 → 解决方式给你梳理。
Debian 默认可能不是 UTF-8(尤其是老系统或最小化安装)。
locale
如果看到:
LANG=C
LC_ALL=
或不是 UTF-8,就会乱码。
✅ 解决:
sudo dpkg-reconfigure locales
选 en_US.UTF-8 或 zh_CN.UTF-8
然后:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.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
JSP 必须明确指定 UTF-8。
✅ JSP 顶部必须有:
<%@ page contentType="text/html;charset=UTF-8" %>
HTML:
<meta charset="UTF-8">
Tomcat 8+ 默认 URI 编码是 UTF-8,但老配置可能不是。
编辑:
/etc/tomcat9/server.xml
Connector 加:
<Connector
port="8080"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
/>
即使 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
你可以补充:
我可以直接给你对应配置文件的最终版本。