全部版块 我的主页
论坛 新商科论坛 四区(原工商管理论坛) 商学院 管理科学与工程
104 0
2025-11-25

一、请求(Request)乱码问题及解决方案

1. POST 请求参数乱码

原因分析:
当客户端(如浏览器)提交表单数据时,默认使用 UTF-8 编码发送内容。然而,像 Tomcat 这类服务器在未做特殊配置的情况下,会以 ISO-8859-1 字符集来解析请求体(request body),从而导致中文字符出现乱码现象。

解决方法:
在获取请求参数之前,显式设置请求的字符编码为 UTF-8:

request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");

注意:此设置必须在调用 request.getParameter() 方法前执行,否则无法生效。

getParameter()

2. GET 请求参数乱码

原因分析:
GET 请求将参数附加在 URL 后面(例如:?name=张三)。Tomcat 默认使用 ISO-8859-1 对 URL 路径和查询字符串进行解码,因此中文参数容易出现乱码。

解决方案(可任选其一):

方法①:手动重新编码(传统处理方式)
先以 ISO-8859-1 获取原始字节流,再用 UTF-8 重新解码:

String name = request.getParameter("name"); // 当前可能是乱码(ISO-8859-1 编码)
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

方法②:修改 Tomcat 配置(推荐做法)
通过修改 Tomcat 的配置文件 server.xml,在 Connector 标签中添加 URIEncoding 属性:

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

完成该配置后,所有 GET 请求中的参数都将自动按照 UTF-8 进行解码,无需额外编码处理。

/login?name=张三

conf/server.xml

<Connector>

URIEncoding="UTF-8"

二、响应(Response)乱码问题

即使请求参数已正确处理,若未对响应设置合适的字符编码,返回给浏览器的内容仍可能出现中文乱码。

设置响应编码的方法如下:

方式1:设置内容类型与字符集(推荐用于文本输出)
使用以下代码同时指定 MIME 类型和字符编码:

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

方式2:单独设置响应字符编码(较少使用)
仅设置字符编码:

response.setCharacterEncoding("UTF-8");

注意事项:
调用 setContentType 方法不仅设置内容类型,还会设置 HTTP 响应头中的 Content-Type 字段,确保浏览器能正确识别并解码响应内容。

setContentType()

Content-Type: text/html;charset=UTF-8

三、最佳实践建议

  • 在整个项目中统一采用 UTF-8 字符编码,涵盖前端页面、Java 源码、数据库存储以及服务器配置等环节。
  • 建议在全局过滤器或初始化配置中统一设置 request 和 response 的编码格式,避免在每个 Servlet 中重复编写相同代码。

示例:通用字符编码过滤器

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
    throws IOException, ServletException {
    req.setCharacterEncoding("UTF-8");
    res.setContentType("text/html;charset=UTF-8");
    chain.doFilter(req, res);
}

对于新开发的项目,推荐使用 Spring Boot 等现代框架,其默认已集成完善的字符编码处理机制,可有效减少此类问题的发生。

web.xml

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群