javaWeb request请求乱码、response响应中文乱码一站式解决方案 | 您所在的位置:网站首页 › js传输中文参数怎么写 › javaWeb request请求乱码、response响应中文乱码一站式解决方案 |
1.情景展示 浏览器向服务器发送get请求且传递的参数为中文时,服务器接收到的参数值已经乱码,如何解决? 服务器向浏览器响应数据且数据中含有中文时,浏览器接收到的数据同样是乱码,如何解决? 2.原因分析浏览器→→→服务器 浏览器向服务器传输数据时,get请求,只有请求头(浏览器的Header),没有请求体, 也就是说:数据会通过Header进行传输,Header要求字符的编码集必须是ISO8859-1, 虽然你传输的是中文,但其实在真正数据传输过程中,中文已经被转成了ISO8859-1,自然,服务器接收到的是乱码数据啦! 服务器→→→浏览器 服务器向浏览器响应数据时,tomcat会为数据进行一次编码,浏览器也会为数据再次进行编码, 若服务器与浏览器对数据进行编码时,二者没有采用同一字符集,则响应数据为中文时必然会出现乱码! 3.探究浏览器→→→服务器(请求乱码) 手动拼接问号传参;form表单提交get请求。 第1种情况:chrome浏览器发送get请求 ①先测试手动问号传参。 地址栏直接拼接参数:url?param1=value1¶m2=value2&... 虽然显示的还是中文,但其实中文已经被编码了! 使用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.解决方案这篇文章封存有两年半啦,闲来无事,看到了,不发布出来,对不起自己曾经的努力,有什么疑问就在评论里说吧。 2022年3月23日09:43:58 request中文乱码 以tomcat服务器为例 get请求 tomcat_home/conf/server.xml: 为标签,指定属性URIEncoding="UTF-8" 。 或者,中文使用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 实验室设备网 版权所有 |