在 Debian 上调整 Tomcat 的编码(字符集),通常是为了解决中文乱码、请求/响应编码不一致等问题。下面按常见场景说明。
server.xml(最关键)编辑 Tomcat 的配置文件:
sudo nano /etc/tomcat9/server.xml
(tomcat 版本可能是 tomcat8 / tomcat10,路径也可能是 /opt/tomcat/conf/server.xml)
找到 Connector,加上:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
useBodyEncodingForURI="true" />
✅ 说明:
URIEncoding="UTF-8":GET 请求参数编码useBodyEncodingForURI="true":POST 和 GET 统一使用请求体编码修改后重启:
sudo systemctl restart tomcat9
Debian 默认 JVM 编码可能不是 UTF-8。
编辑:
sudo systemctl edit tomcat9
加入:
[Service]
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
保存后:
sudo systemctl daemon-reload
sudo systemctl restart tomcat9
setenv.sh 中配置(通用)sudo nano /opt/tomcat/bin/setenv.sh
添加:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
@Bean
public FilterRegistrationBean<CharacterEncodingFilter> encodingFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return new FilterRegistrationBean<>(filter);
}
logging.propertiessudo nano /etc/tomcat9/logging.properties
确保:
java.util.logging.ConsoleHandler.encoding = UTF-8
locale
java -XshowSettings:properties -version 2>&1 | grep encoding
或在 JSP 中测试:
<%= request.getCharacterEncoding() %>
❌ 只改应用不改 server.xml → GET 乱码
❌ 只改 Tomcat 不改 JVM → 日志/文件名乱码
❌ Debian 默认 LANG=C → 全局乱码
建议同时设置:
sudo apt install locales
sudo dpkg-reconfigure locales
# 选 zh_CN.UTF-8 / en_US.UTF-8
如果你告诉我:
我可以给你更精确的配置方案。