楼主: 寒笙倩
55 0

Web请求乱码解决方案 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-12-7
最后登录
2018-12-7

楼主
寒笙倩 发表于 2025-11-25 14:44:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、请求(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

二维码

扫码加我 拉你入群

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

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

关键词:解决方案 WEB Parameter Character exception

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-9 08:00