在 JSP 中防止中文乱码,核心原则是:请求、响应、页面编码、数据库编码必须统一(推荐 UTF-8)。下面按常见场景逐一说明。
在 每个 JSP 页面顶部 加上:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
含义:
pageEncoding:JSP 文件本身的编码contentType:输出给浏览器的编码✅ 必须放在 JSP 第一行
在 <head> 中加:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
或 HTML5 写法:
<meta charset="UTF-8">
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);
}
}
✅ 这是最标准、最彻底的解决方案
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
⚠️ 只对当前 Servlet 有效
Tomcat 8+ 默认 UTF-8 处理 GET 参数,一般无需额外设置。
修改 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8" />
⚠️ 修改后需重启 Tomcat
CREATE DATABASE test
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
(MySQL 8 可省略)
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
如果你愿意,可以告诉我:
我可以给你 针对你项目的精确解决方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。