温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JSP如何防止中文乱码

发布时间:2026-07-17 05:19:30 来源:亿速云 阅读:110 作者:小樊 栏目:编程语言

JSP 中防止中文乱码,核心原则是:请求、响应、页面编码、数据库编码必须统一(推荐 UTF-8)。下面按常见场景逐一说明。


一、JSP 页面本身中文乱码

✅ 1. 设置 JSP 页面编码(最重要)

每个 JSP 页面顶部 加上:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

含义:

  • pageEncoding:JSP 文件本身的编码
  • contentType:输出给浏览器的编码

必须放在 JSP 第一行


✅ 2. 设置浏览器解析编码(HTML)

<head> 中加:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

或 HTML5 写法:

<meta charset="UTF-8">

二、POST 请求中文乱码(表单提交)

✅ 1. 使用过滤器(推荐)

编写过滤器 EncodingFilter.java

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }
}

这是最标准、最彻底的解决方案


✅ 2. 单个 Servlet 中处理(不推荐)

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

⚠️ 只对当前 Servlet 有效


三、GET 请求中文乱码

✅ 1. Tomcat 8 及以上(推荐)

Tomcat 8+ 默认 UTF-8 处理 GET 参数,一般无需额外设置。


✅ 2. Tomcat 7 及以下

修改 server.xml

<Connector port="8080" protocol="HTTP/1.1"
    URIEncoding="UTF-8" />

⚠️ 修改后需重启 Tomcat


四、数据库中文乱码

✅ 1. MySQL 示例

建库建表

CREATE DATABASE test
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

JDBC 连接字符串

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

(MySQL 8 可省略)


五、Servlet 输出中文乱码

response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");

六、常见错误总结(重点)

❌ 只在 JSP 写 charset=UTF-8,但没写 pageEncoding
❌ POST 请求没设置 request.setCharacterEncoding("UTF-8")
❌ Tomcat 用 GET 但没设置 URIEncoding
❌ 数据库编码不是 UTF-8
❌ 页面、请求、数据库编码不一致


✅ 最稳妥配置清单(推荐)

✅ JSP:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

✅ HTML:

<meta charset="UTF-8">

✅ 全局过滤器:

request.setCharacterEncoding("UTF-8");

✅ 数据库:

utf8mb4

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

  • 用的是 Tomcat 几?
  • POST 还是 GET?
  • 乱码发生在页面显示还是数据库?

我可以给你 针对你项目的精确解决方案

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI