在 Debian 上运行 Tomcat 出现乱码,通常不是 Tomcat 本身的 bug,而是字符编码配置不一致导致的。下面从常见原因 → 对应解决办法给你系统地说明。
Tomcat(尤其是 8 之前)默认编码是 ISO-8859-1,而你的网页/程序用的是 UTF-8。
编辑:
/etc/tomcat9/server.xml
# 或
/opt/tomcat/conf/server.xml
找到 Connector:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
connectionTimeout="20000"
redirectPort="8443" />
✅ 必须重启 Tomcat
systemctl restart tomcat9
在 Servlet / Spring 中统一设置:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
Spring 项目推荐加过滤器:
CharacterEncodingFilter
(Spring Boot 默认已处理)
<%@ page contentType="text/html;charset=UTF-8" %>
<meta charset="UTF-8">
编辑:
/etc/default/tomcat9
添加:
JAVA_OPTS="-Dfile.encoding=UTF-8"
或:
CATALINA_OPTS="-Dfile.encoding=UTF-8"
locale
应为:
LANG=zh_CN.UTF-8
如果不是:
sudo dpkg-reconfigure locales
检查:
locale
如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
选择 zh_CN.UTF-8 或 en_US.UTF-8
URIEncoding="UTF-8"-Dfile.encoding=UTF-8Debian + Tomcat 乱码 = 编码不统一(ISO-8859-1 vs UTF-8)
如果你愿意,可以告诉我:
我可以直接给你精确配置。