纵有疾风起
人生不言弃

request乱码

ok,今天我们来讲讲request乱码的问题。

我们先写个简单页面,以post的方式提交表单,里面只包含有用户名:

request乱码插图
表单提交

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

request乱码插图1
中文乱码

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

request乱码插图2
解决乱码1

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

request乱码插图3
解决乱码2

原理分析

request乱码插图4
图图

服务器以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

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » request乱码
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录