当 Linux 系统编码为 GBK,而 Tomcat 使用 UTF-8 时,程序界面乱码的核心原因是编码 / 解码环节不统一(如 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 程序默认文件编码(如读写文件、字符串处理)
Tomcat 处理 HTTP 请求 / 响应时,需明确指定编码,避免使用系统默认编码(GBK)。
操作步骤:
修改 Tomcat 的
conf/server.xml,找到
<Connector> 标签(通常是 8080 端口的配置),添加编码参数:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" <!-- 解析URL参数的编码 -->
useBodyEncodingForURI="true"
URIEncoding="UTF-8":确保 URL 中的参数(如?name=中文)以 UTF-8 解码。
useBodyEncodingForURI="true":POST 请求体参数的编码跟随request.setCharacterEncoding设置(后续过滤器会统一设置为 UTF-8)。
在conf/web.xml中,把utf-8的过滤器释放开