javaWeb request请求乱码、response响应中文乱码一站式解决方案 您所在的位置:网站首页 js传输中文参数怎么写 javaWeb request请求乱码、response响应中文乱码一站式解决方案

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

2023-03-21 01:36| 来源: 网络整理| 查看: 265

 

1.情景展示

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

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

2.原因分析

  浏览器→→→服务器

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

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

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

  服务器→→→浏览器

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

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

3.探究

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

手动拼接问号传参;form表单提交get请求。

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

  ①先测试手动问号传参。

  地址栏直接拼接参数:url?param1=value1¶m2=value2&...

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

虽然显示的还是中文,但其实中文已经被编码了!

javaWeb request请求乱码、response响应中文乱码一站式解决方案_服务器_02

  使用F12捕获这个请求,你会发现get请求中,中文参数已经被编码(响应数据乱码问题,先不考虑)。

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

  页面最终显示结果:

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

  后台代码不做任何字符处理

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

后台接收到的中文参数会出现乱码情况!!!

javaWeb request请求乱码、response响应中文乱码一站式解决方案_服务器_06

转码处理

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

  正常显示

javaWeb request请求乱码、response响应中文乱码一站式解决方案_服务器_08

  ②再测试form表单提交get请求。

  前端代码为:

javaWeb request请求乱码、response响应中文乱码一站式解决方案_服务器_09

  提交get请求

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

  使用F12捕获这个请求,你同样会发现get请求,出现上面的结果

中文参数已经被编码,后台在没有做字符处理的情况下,获取到的中文参数,同样会造成乱码!!!)

第2种情况:ie浏览器发送get请求

  先测试手动问号传参。

url,中文词汇已经编码

后台接收到的中文参数也会乱码!!!(情况同上)

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

url,中文词汇没有作编码处理

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

后台接收的中文参数已经乱码,必须作转码处理才能正常显示!

  IE浏览器的地址栏不会对中文进行编码处理!

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

转码处理

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

  因为页面的编码集为GB2312,所以,转码时要用gb2312。

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

  ⑤再测试form表单提交get请求。

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

  form表单提交,同样中文被动进行了编码

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

后台接收到的中文参数,同样会出现乱码情况!!!

javaWeb request请求乱码、response响应中文乱码一站式解决方案_服务器_06

  转码处理

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

第3种情况:postman发送get请求

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

  后台接收到会乱码,转码需要用utf-8

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

postman发送请求的参数的字符集为UTF-8。

4.解决方案

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

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

2022年3月23日09:43:58

request中文乱码

以tomcat服务器为例

get请求

tomcat_home/conf/server.xml:

为标签,指定属性URIEncoding="UTF-8" 。

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

或者,中文使用encodeURI()进行两次编码,即:

encodeURI(encodeURI("中文字符"))

或者通过过滤器统一对请求参数进行转码处理,如:

new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");

post请求

request.setCharacterEncoding("utf-8");

response中文乱码

在设置响应内容类型的时候,指定字符集;

response.setContentType("text/html;");response.setContentType("application/json;charset=utf-8");

 

写在最后

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

作者:Marydon作者:Marydon



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有