Java教程

javaWeb request请求乱码、response响应中文乱码一站式解决方案

本文主要是介绍javaWeb request请求乱码、response响应中文乱码一站式解决方案,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
   

1.情景展示

  浏览器向服务器发送get请求且传递的参数为中文时,服务器接收到的参数值已经乱码,如何解决?

  服务器向浏览器响应数据且数据中含有中文时,浏览器接收到的数据同样是乱码,如何解决?

2.原因分析

  浏览器→→→服务器

  浏览器向服务器传输数据时,get请求,只有请求头(浏览器的Header),没有请求体,

  也就是说:数据会通过Header进行传输,Header要求字符的编码集必须是ISO8859-1,

  虽然你传输的是中文,但其实在真正数据传输过程中,中文已经被转成了ISO8859-1,自然,服务器接收到的是乱码数据啦!

  服务器→→→浏览器

  服务器向浏览器响应数据时,tomcat会为数据进行一次编码,浏览器也会为数据再次进行编码,

  若服务器与浏览器对数据进行编码时,二者没有采用同一字符集,则响应数据为中文时必然会出现乱码!

3.探究

  浏览器→→→服务器(请求乱码)

  发送get请求的方式有两种:手动拼接问号传参;form表单提交get请求。

  第1种情况:chrome浏览器发送get请求

  ①先测试手动问号传参

  地址栏直接拼接参数:url?param1=value1&param2=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。

4.解决方案

这篇文章封存有两年半啦,闲来无事,看到了,不发布出来,对不起自己曾经的努力,有什么疑问就在评论里说吧。 

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

  • 个人主页

 

这篇关于javaWeb request请求乱码、response响应中文乱码一站式解决方案的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!