ok,今天我们来讲讲request乱码的问题。
我们先写个简单页面,以post的方式提交表单,里面只包含有用户名:

表单提交
接着浏览器里访问这个页面,并分别两次提交用户名“username”和“中国”:

中文乱码
会发现,第二次提交中文时发生乱码了,那秉着发现问题就解决问题的思路,我在获取请求数据前添加一句request.setCharacterEncoding("UTF-8");乱码问题解决了。

解决乱码1
那么,我们现在改用get方式提交表单,会发现之前添加的那一句代码不起作用了,why?分析原因,应该是在执行第一个getParameter()时,Java按照指定的编码来提交数据,而对于get方法提交表单时,提交的内容在URL中,一开始就已经按照编码提交数据,setCharacterEncoding()自然就无效。下面给出以get方式提交表单时,请求参数乱码的问题:

解决乱码2
原理分析

图图
服务器以post方式提交“中国”到request里面(在提交时查UTF-8码表中“中国”对应的码)在request里面是98与99,在servlet里用parameter获取提交的数据(这里面用ISO8859,98与99我随意指定它分别为*,&),返回String类型时又要查一次码表,所以在获取数据前控制request的码表是UTF-8。
以get方式提交时,反向去查找后重又拿到98,99,再用98,99构建新的字符串时再控制它去查UTF-8的码表。
谢谢观赏!!!
文章转载于:https://www.jianshu.com/p/3314f7753818
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~