在 Debian 上运行 Tomcat 时,“字符集”通常涉及 3 个层面,你需要根据问题场景来配置。下面按常见需求说明。
catalina.sh(全局 JVM 编码)编辑:
/etc/tomcat9/catalina.sh
# 或 /opt/tomcat/bin/catalina.sh
在文件开头或 JAVA_OPTS 处增加:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
✅ 影响:JVM 默认字符集
server.xml(HTTP 请求/响应编码)编辑:
/etc/tomcat9/server.xml
在 <Connector> 中加:
<Connector
port="8080"
protocol="HTTP/1.1"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
connectionTimeout="20000"
redirectPort="8443" />
✅ 解决:URL 参数乱码、POST 乱码
web.xml(默认 servlet 编码)在 web.xml 中添加:
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
locale
sudo dpkg-reconfigure locales
选择:
en_US.UTF-8
或
zh_CN.UTF-8
然后:
sudo update-locale LANG=en_US.UTF-8
重启系统或重新登录。
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
ps aux | grep tomcat
应看到:
-Dfile.encoding=UTF-8
或在 JSP 中:
<%= System.getProperty("file.encoding") %>
✅ Debian:en_US.UTF-8
✅ Tomcat:URIEncoding="UTF-8"
✅ JVM:-Dfile.encoding=UTF-8
如果你能说明 具体乱码场景(页面 / 日志 / 数据库 / 上传文件),我可以给你更精确的配置。