温馨提示×

debian tomcat为什么乱码

小樊
42
2026-09-21 18:29:02
栏目: 智能运维

在 Debian 上运行 Tomcat 出现乱码,通常不是 Tomcat 本身的 bug,而是字符编码配置不一致导致的。下面从常见原因 → 对应解决办法给你系统地说明。


一、最常见原因(90% 的情况)

1️⃣ Tomcat 默认使用 ISO-8859-1

Tomcat(尤其是 8 之前)默认编码是 ISO-8859-1,而你的网页/程序用的是 UTF-8。

表现

  • 页面显示乱码
  • request.getParameter() 取到乱码
  • 日志中文乱码

二、解决方案(按使用场景)

✅ 场景 1:GET 请求参数乱码(URL 中的中文)

编辑:

/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

✅ 场景 2:POST 请求乱码

在 Servlet / Spring 中统一设置:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

Spring 项目推荐加过滤器:

CharacterEncodingFilter

(Spring Boot 默认已处理)


✅ 场景 3:页面显示乱码(JSP / HTML)

JSP

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

HTML

<meta charset="UTF-8">

✅ 场景 4:日志乱码(catalina.out)

1️⃣ 设置 JVM 编码

编辑:

/etc/default/tomcat9

添加:

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

或:

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

2️⃣ 确认终端编码

locale

应为:

LANG=zh_CN.UTF-8

如果不是:

sudo dpkg-reconfigure locales

✅ 场景 5:Debian 系统本身编码问题

检查:

locale

如果不是 UTF-8:

sudo apt install locales
sudo dpkg-reconfigure locales

选择 zh_CN.UTF-8 或 en_US.UTF-8


三、快速自检清单 ✅

  • [ ] server.xml 有 URIEncoding="UTF-8"
  • [ ] 页面声明 UTF-8
  • [ ] JVM 启动参数包含 -Dfile.encoding=UTF-8
  • [ ] Debian locale 是 UTF-8
  • [ ] 数据库编码是 UTF-8(如 MySQL)

四、总结一句话

Debian + Tomcat 乱码 = 编码不统一(ISO-8859-1 vs UTF-8)

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

  • Tomcat 版本
  • Debian 版本
  • 乱码出现在(页面 / 日志 / 数据库 / 接口)

我可以直接给你精确配置。

0 踩