doGet和doPost乱码解决方案

本文详细解释了Web应用中出现乱码的原因,主要是编码和解码格式不一致导致。介绍了前端传输数据时的编码,默认为UTF-8,及Tomcat不同版本的默认解码格式差异。提供了修改Tomcat默认编码的方法,以及如何在response中正确设置编码和解码格式,确保POST和GET请求参数的正确解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说一下乱码的原因:

乱码是因为编码和解码的格式不一而引发的问题。

 

我们来看一下以下步骤:

1.在前端页面传输数据时,会先将数据进行编码再进行传输(浏览器默认的编码格式是UTF-8)

2.数据传输到Servlet时,tomcat会使用其默认编码进行解码。

测试结果Tomcat从8.0开始转化为默认编码为utf-8的格式了,但是8.0以下的tomcat默认的编码还是ISO-8859-1;

3.获得的参数用response封装返回时,要设置相对应的编码格式和解码格式。

 

所以如果出现问题,那么一定是以上步骤中有编码解码格式不一致的情况。

 

如何修改tomcat默认编码?

修改tomcat下的conf/server.xml文件,找到Connector标签,添加 URIEncoding="UTF-8"

最终结果为如下代码:

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

 

response如何设置对应的编码和解码格式?

编码

response.setCharacterEncoding("utf-8");

解码

response.setContentType("application/json; charset=utf-8");

 

POST方式遇到的问题:

使用POST进行获取参数的时候要注意!

必须在doPost方法的一开始就使用:request.setCharacterEncoding("utf-8");

或者在过滤器中一开始就写上request.setCharacterEncoding("utf-8");来保证POST方式后面获取到的parameter正常,

【这里有个问题要记录一下,如果不写这一句直接在doPost中getParameter,就会造成获取的中文参数异常:这句代码约束post中的内容解码格式为utf-8,必须写在doPost或者filter中第一个request.getParameter之前才行,如果没有设置utf-8,在调用第一个getParameter之后request中的所有键值对就都被解析成了ISO-8859-1的编码的字符了,再去设置characterEncoding为utf-8就已经无效了,就只能通过getParameter之后new String(xxx.getBytes("ISO-8859-1"),"utf-8")的方式来还原字符串了】

但是get方式是取决于Tomcat的默认URLencoding的编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值