浏览器向服务器发送get请求且传递的参数为中文时,服务器接收到的参数值已经乱码,如何解决?
服务器向浏览器响应数据且数据中含有中文时,浏览器接收到的数据同样是乱码,如何解决?
浏览器→→→服务器
浏览器向服务器传输数据时,get请求,只有请求头(浏览器的Header),没有请求体,
也就是说:数据会通过Header进行传输,Header要求字符的编码集必须是ISO8859-1,
虽然你传输的是中文,但其实在真正数据传输过程中,中文已经被转成了ISO8859-1,自然,服务器接收到的是乱码数据啦!
服务器→→→浏览器
服务器向浏览器响应数据时,tomcat会为数据进行一次编码,浏览器也会为数据再次进行编码,
若服务器与浏览器对数据进行编码时,二者没有采用同一字符集,则响应数据为中文时必然会出现乱码!
浏览器→→→服务器(请求乱码)
发送get请求的方式有两种:手动拼接问号传参;form表单提交get请求。
第1种情况:chrome浏览器发送get请求
①先测试手动问号传参。
地址栏直接拼接参数:url?param1=value1¶m2=value2&...
发现一个有意思的现象,你将地址栏的url拷贝出来,你会发现:虽然显示的还是中文,但其实中文已经被编码了!
使用F12捕获这个请求,你会发现get请求中,中文参数已经被编码(响应数据乱码问题,先不考虑)。
页面最终显示结果:
后台代码不做任何字符处理
后台接收到的中文参数会出现乱码情况!!!
转码处理
正常显示
②再测试form表单提交get请求。
前端代码为:
提交get请求
使用F12捕获这个请求,你同样会发现get请求,出现上面的结果
(中文参数已经被编码,后台在没有做字符处理的情况下,获取到的中文参数,同样会造成乱码!!!)
第2种情况:ie浏览器发送get请求
先测试手动问号传参。
③url,中文词汇已经编码
后台接收到的中文参数也会乱码!!!(情况同上)
④url,中文词汇没有作编码处理
后台接收的中文参数已经乱码,必须作转码处理才能正常显示!
IE浏览器的地址栏不会对中文进行编码处理!
转码处理
因为页面的编码集为GB2312,所以,转码时要用gb2312。
⑤再测试form表单提交get请求。
form表单提交,同样中文被动进行了编码
后台接收到的中文参数,同样会出现乱码情况!!!
转码处理
第3种情况:postman发送get请求
后台接收到会乱码,转码需要用utf-8
由此可以推断,postman发送请求的参数的字符集为UTF-8。
这篇文章封存有两年半啦,闲来无事,看到了,不发布出来,对不起自己曾经的努力,有什么疑问就在评论里说吧。
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!