当 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,找到
xml
connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" /> 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