Web请求乱码解决方案

一、请求(Request )乱码

✅ 1. POST 请求参数乱码

原因:
  • 客户端(浏览器)默认以 UTF-8 编码发送表单数据。

  • 但 Tomcat 等服务器默认使用 ISO-8859-1 解码请求体(request body),导致中文乱码。

解决方案:

在读取参数前,设置 request 的字符编码为 UTF-8

复制代码
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");

⚠️ 必须在调用 getParameter() 之前设置,否则无效。


✅ 2. GET 请求参数乱码

原因:
  • GET 请求的参数附加在 URL 中(如 /login?name=张三)。

  • Tomcat 默认使用 ISO-8859-1 解码 URL 路径和查询字符串(query string)。

解决方案(任选其一):
方法①:手动重新编码(传统方式)
复制代码
String name = request.getParameter("name"); // 此时是乱码(ISO-8859-1 编码)
// 先用 ISO-8859-1 获取原始字节,再用 UTF-8 重新解码
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
方法②:配置 Tomcat(推荐)

conf/server.xml 中,为 <Connector> 添加 URIEncoding="UTF-8"

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

✅ 配置后,所有 GET 请求参数将自动按 UTF-8 解码,无需代码处理。


二、响应(Response)乱码

即使请求参数正确,如果响应未设置编码,返回给浏览器的中文仍可能乱码。

✅ 设置响应编码:

复制代码
// 方式1:设置字符流编码(推荐用于文本)
response.setContentType("text/html;charset=UTF-8");
​
// 方式2:单独设置字符编码(较少用)
response.setCharacterEncoding("UTF-8");

🔔 注意:setContentType() 会同时设置响应头 Content-Type: text/html;charset=UTF-8,确保浏览器正确解码。

三、最佳实践建议

  1. 统一使用 UTF-8 编码(前端页面、数据库、Java 代码、服务器配置)。

  2. web.xml 或过滤器中统一设置 request/response 编码(避免每个 Servlet 重复写)。

    复制代码
    // 示例:通用编码过滤器
    public void doFilter(ServletRequest req, ServletResponse res, ...) {
        req.setCharacterEncoding("UTF-8");
        res.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, res);
    }
  3. 对于新项目,使用 Spring Boot 等框架,默认已处理好编码问题。

相关推荐
庞轩px27 分钟前
致远互联实习复盘:一条SQL替代300次循环查询,组织架构选择器从5秒降到300毫秒
java·sql·mysql·mybatis·实习经历·n+1问题·join联表查询
vooy pktc27 分钟前
Spring Security 官网文档学习
java·学习·spring
钰衡大师31 分钟前
Activiti 7 工作流技术文档
java·数据库·spring boot
dvjr cloi1 小时前
Spring Framework 中文官方文档
java·后端·spring
研究点啥好呢1 小时前
滴滴Go后端开发工程师面试题精选:10道高频考题+答案解析
java·开发语言·golang
ictI CABL1 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
傻瓜搬砖人1 小时前
SpringMVC的请求
java·前端·javascript·spring
亚历克斯神1 小时前
Java 开发者 2026 成长路线图:从初级到架构师
java·spring·微服务
佛系彭哥1 小时前
用飞算JavaAI做项目:在线图书借阅平台设计与实现
java·飞算javaai炫技赛
亚历克斯神1 小时前
Java 代码质量保障:静态分析与代码审查实践
java·spring·微服务