10,612
社区成员




如图,去掉这一行,在servlet中用request.getParameter获取值是乱码,加上这一行,就不会乱码。
这是为什么呢?
猜测原因是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里面,除非用前面的第一种方法处理过,不然就是乱码,如何转码都不能恢复。