zoukankan      html  css  js  c++  java
  • 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.解决方案

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

    写在最后

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

     相关推荐:

  • 相关阅读:
    Redux API之compose
    Redux API之bindActionCreators
    Django组件-admin
    Django组件-分页器
    Django视图之FBV与CBV
    前端综合练习
    05-前端之jQuery
    关于DOM操作的案例
    04-再探JavaScript
    03-初识JavaScript
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/10385118.html
Copyright © 2011-2022 走看看