java web项目Filter内部调用request.getParameter和不调用引起的乱码现象

一棵小小树 2022-10-11 01:11:00

如图,去掉这一行,在servlet中用request.getParameter获取值是乱码,加上这一行,就不会乱码。

这是为什么呢?

 

...全文
8162 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一棵小小树 2022-10-11
  • 打赏
  • 举报
回复

猜测原因是JSP用的是UTF-8编码,和系统默认的gbk不一致。Filter虽然设置UTF-8编码,但是实际上参数解析是惰性的,不调用一次getParaameter,request的参数不会真正按照设置的UTF-8编码解析。后续其他的拦截器里面可能会用默认的编码GBK覆盖掉Filter设置的UTF-8,这样在servlet里面实际解析用的就是gbk而不是Filter里面设置的UTF-8。
目前我知道有两种解决办法,一是Filter调用一次getParameter,强制立马按照UTF-8解析参数。二是前端页面改成gbk编码,迎合系统默认编码。
我曾在Filter里面读取了request的body部分,在这里打印出来的各个参数值确实是按照前端设置的UTF-8转码传进来的,按照UTF-8解码也可以拿到正常的中文。只是进到servlet里面,除非用前面的第一种方法处理过,不然就是乱码,如何转码都不能恢复。

10,612

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧