温馨提示×

debianjsp乱码咋解决

小樊
53
2026-10-07 15:33:12
栏目: 编程语言

在 Debian 上跑 JSP(通常是 Tomcat) 出现乱码,一般是编码不一致导致的。下面按常见原因给你一套排查和解决办法。


一、确认乱码场景

先分清是哪种乱码:

  1. 页面显示乱码(浏览器看到的是 ??? 或 锘?)
  2. 表单提交乱码(POST 中文变乱码)
  3. 数据库乱码
  4. 日志/控制台乱码

二、JSP 页面本身编码(最常见)

1️⃣ JSP 文件头必须加

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
  • pageEncoding:JSP 文件本身的编码
  • contentType:发给浏览器的编码

✅ 两个都写 UTF-8


2️⃣ HTML 里也要声明

<meta charset="UTF-8">

三、Tomcat 编码设置(非常关键)

1️⃣ server.xml(解决 GET 乱码)

编辑:

/etc/tomcat9/server.xml

(版本可能是 tomcat8 / tomcat10)

找到 Connector,加:

URIEncoding="UTF-8"

例如:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8" />

重启 Tomcat:

systemctl restart tomcat9

2️⃣ POST 乱码(过滤器)

在 web.xml 加:

<filter>
  <filter-name>encoding</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>
</filter>

<filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

四、Debian 系统编码(很多人忽略)

查看当前编码

locale

如果不是 UTF-8:

sudo dpkg-reconfigure locales

勾选:

en_US.UTF-8
zh_CN.UTF-8

然后:

export LANG=zh_CN.UTF-8

五、数据库乱码(MySQL 为例)

MySQL 编码检查

show variables like 'character%';

应为:

utf8mb4

连接 URL 加:

?useUnicode=true&characterEncoding=UTF-8

六、快速自检清单 ✅

  • [ ] JSP 有 pageEncoding="UTF-8"
  • [ ] Tomcat URIEncoding="UTF-8"
  • [ ] Debian locale 是 UTF-8
  • [ ] 数据库是 UTF-8
  • [ ] 浏览器编码是 UTF-8

如果你愿意,可以告诉我:

  • Tomcat 版本
  • 乱码是 页面 / 表单 / 数据库
  • 示例 JSP 或报错截图

我可以直接帮你改配置。

0 踩