在 Debian 上配置 Tomcat 的编码(字符集),通常需要从 Tomcat 自身、连接器(Connector)、应用、系统环境 几个方面入手。下面以 Tomcat 9 / 10 / 11(Debian 常见版本) 为例说明。
Tomcat 默认使用 ISO-8859-1,必须显式改为 UTF-8。
编辑 Tomcat 配置文件:
sudo nano /etc/tomcat9/server.xml
(根据版本可能是 tomcat9 / tomcat10)
找到 HTTP Connector(通常是 8080 端口):
<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 编码一致编辑 Tomcat 环境配置文件:
sudo nano /etc/default/tomcat9
添加或修改:
JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
或(Tomcat 10+):
CATALINA_OPTS="-Dfile.encoding=UTF-8"
重启 Tomcat:
sudo systemctl restart tomcat9
在 web.xml 中配置编码过滤器(推荐):
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
sudo nano /var/lib/tomcat9/conf/logging.properties
确保:
java.util.logging.ConsoleHandler.encoding = UTF-8
locale
如果不是 UTF-8:
sudo dpkg-reconfigure locales
选择:
en_US.UTF-8
或中文:
zh_CN.UTF-8
<%= request.getCharacterEncoding() %>
应为:
UTF-8
| 问题 | 原因 |
|---|---|
| 中文乱码 | 未配置 URIEncoding |
| 日志乱码 | JVM 或 logging 编码错误 |
| 控制台乱码 | Debian locale 非 UTF-8 |
| Spring 项目乱码 | 缺少 CharacterEncodingFilter |
如果你愿意,可以告诉我:
我可以给你 更精确的配置方案。