linux服务器操作系统字符集是GBK,tomcat和部署的程序是UTF-8,启动后应用界面乱码如何解决

 

当 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

 

posted @ 2025-10-22 18:00  痴迷的小和尚  阅读(16)  评论(0)    收藏  举报