Tomcat的启动脚本catalina.sh(位于bin目录)需添加-Dfile.encoding=UTF-8参数,强制JVM使用UTF-8编码处理请求和响应。
操作步骤:
/path/to/tomcat/bin/catalina.sh(如vim catalina.sh);#!/bin/bash之后)添加:export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8";Tomcat的server.xml(位于conf目录)中的<Connector>标签需添加URIEncoding="UTF-8"属性,确保Tomcat正确解析URL中的中文参数(如?name=张三)。
操作步骤:
/path/to/tomcat/conf/server.xml;<Connector>标签(通常包含port="8080"),添加URIEncoding="UTF-8",例如:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
通过web.xml(位于Web应用的WEB-INF目录)配置字符编码过滤器,强制所有请求和响应使用UTF-8编码。推荐使用Tomcat自带的SetCharacterEncodingFilter(无需额外依赖)。
操作步骤:
WEB-INF/web.xml;<web-app>标签内添加以下配置:<filter>
<filter-name>CharacterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
确保CentOS系统的默认字符编码为UTF-8,避免Tomcat继承系统的非UTF-8编码(如GBK)。
操作步骤:
echo $LANG(若输出不是en_US.UTF-8或zh_CN.UTF-8,需修改);/etc/locale.conf文件,添加或修改以下内容:LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
source /etc/locale.conf使设置生效。若项目中使用JSP,需确保JSP页面的编码与Tomcat配置一致。在JSP页面顶部添加以下指令:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
这会强制JSP页面以UTF-8编码生成HTML内容。
若Web应用与数据库交互(如MySQL),需确保数据库连接使用UTF-8编码。例如,MySQL连接URL需添加characterEncoding=UTF-8参数:
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";
这会确保数据库读写的字符编码与Tomcat一致。
完成以上步骤后,重启Tomcat服务(sudo systemctl restart tomcat),再次测试应用是否仍有乱码问题。若问题依旧,需检查应用程序代码中是否有硬编码的非UTF-8编码设置(如手动调用request.setCharacterEncoding("GBK"))。