doGet和doPost乱码解决方案

先说一下乱码的原因:

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

我们来看一下以下步骤:

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的编码。

猜你喜欢

转载自blog.csdn.net/qq_36470686/article/details/83019872
今日推荐