在 Debian 上配置 Tomcat 编码(字符集),通常是为了解决 中文乱码、POST/GET 乱码 等问题。下面按 常见场景 + 推荐做法 给你一个完整说明。
✅ 推荐统一使用 UTF-8
✅ 需要配置的地方主要有:
Tomcat 的编码由 JVM 启动参数 决定。
编辑 Tomcat 的 systemd 配置:
sudo systemctl edit tomcat9
或手动编辑:
sudo vim /etc/systemd/system/tomcat9.service.d/override.conf
添加:
[Service]
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
然后执行:
sudo systemctl daemon-reload
sudo systemctl restart tomcat9
ps -ef | grep tomcat
或写个 JSP 测试:
<%= System.getProperty("file.encoding") %>
✅ 输出应为:UTF-8
编辑:
sudo vim /etc/tomcat9/server.xml
找到 <Connector>:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
✅ 改为:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true" />
| 参数 | 作用 |
|---|---|
URIEncoding="UTF-8" |
GET 请求参数编码 |
useBodyEncodingForURI="true" |
让 POST 和 GET 编码一致 |
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
每个 JSP 顶部必须有:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
HTML 中:
<meta charset="UTF-8">
Tomcat 会继承系统编码。
locale
sudo dpkg-reconfigure locales
勾选:
✅ zh_CN.UTF-8 或 en_US.UTF-8
然后:
sudo update-locale LANG=zh_CN.UTF-8
重启服务器或重新登录。
编辑:
sudo vim /etc/tomcat9/logging.properties
确保:
java.util.logging.ConsoleHandler.encoding = UTF-8
| 场景 | 解决方案 |
|---|---|
| GET 参数乱码 | URIEncoding="UTF-8" |
| POST 乱码 | request.setCharacterEncoding("UTF-8") |
| 控制台乱码 | JVM + 系统 locale |
| 日志乱码 | logging.properties |
| 文件名乱码 | sun.jnu.encoding=UTF-8 |
✅ JVM
-Dfile.encoding=UTF-8
✅ server.xml
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
✅ 应用
request/response UTF-8
✅ 系统
LANG=zh_CN.UTF-8
如果你愿意,可以告诉我:
我可以给你 精确到配置文件路径 的方案。