当 Linux 系统编码为 GBK,而 Tomcat 使用 UTF-8 时,程序界面乱码的核心原因是编码 / 解码环节不统一(如 JVM 默认编码、请求响应编码、资源文件编码等不一致)。解决需从多个层面统一编码为 UTF-8,具体步骤如下:
1. 强制 JVM 使用 UTF-8 编码
Linux 系统默认 GBK 可能导致 JVM 继承系统编码(默认 GBK),与 Tomcat 的 UTF-8 冲突。需通过 Tomcat 启动参数强制 JVM 使用 UTF-8。
操作步骤:
修改 Tomcat 安装目录下的
bin/catalina.sh
(Linux 脚本),在文件开头添加 JVM 参数:# 在catalina.sh中找到“#!/bin/sh”下方,添加如下内容 JAVA_OPTS="-Dfile.encoding=UTF-8"
.file.encoding
:控制 Java 程序默认文件编码(如读写文件、字符串处理)
2. 配置 Tomcat 连接器(Connector)编码
Tomcat 处理 HTTP 请求 / 响应时,需明确指定编码,避免使用系统默认编码(GBK)。
操作步骤:
修改 Tomcat 的
conf/server.xml
,找到 <Connector>
标签(通常是 8080 端口的配置),添加编码参数:xml
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8" <!-- 解析URL参数的编码 -->useBodyEncodingForURI="true" <!-- 对POST请求体参数使用request.setCharacterEncoding的编码 -->
/>
URIEncoding="UTF-8"
:确保 URL 中的参数(如?name=中文
)以 UTF-8 解码。useBodyEncodingForURI="true"
:POST 请求体参数的编码跟随request.setCharacterEncoding
设置(后续过滤器会统一设置为 UTF-8)。
3. 配置 web.xml
中配置过滤器
在conf/web.xml中,把utf-8的过滤器释放开
4. 重新启动tomcat,清空浏览器缓存,ok