【JavaWeb】GET请求乱码问题

一、乱码分析

  • GET方式提交参数的方式是将参数放到URL后面,如果使用的不是UTF-8,那么会对参数进行URL编码处理
  • HTML中的 <meta charset='字符集'/> 影响了GET方式提交参数的URL编码
  • tomcat10.1.7 的URI编码默认为 UTF-8
  • 当GET方式提交的参数URL编码和tomcat10.1.7默认的URI编码不一致时,就会出现乱码

二、乱码演示

  • 浏览器解析的文档的 <meta charset="GBK" />

<meta charset="GBK" />改为GBK后,不仅浏览器解析的时候字符集变为GBK了,同时这个html文件也会默认改为GBK编码,并且还影响了这个Form表单提交的时候用什么字符集对这些参数进行编码。

1682385870660

GET方式提交时,会对数据进行URL编码处理,是将GBK 转码为 “百分号码”,我们把这串数字看成1010即可,只不过浏览器在解析这个1010的时候,为了区分字节,夹杂了一些%处理,每一个%代表一个字节的开始,%后面的其实是用的十六方式表示的一个字节。

由于我们是使用GBK编码方式进行提交,而在GBK中,一个汉字对应两个字节,所以我们发现刚刚输入的小明中的 变为了 %D5%C5 变为了 %C8%FD

1682385997927

也就是我们输入的参数转换为 “百分号码” 使用的字符集是GBK,紧接着Tomcat就会接收这个报文,紧接着对URI的内容进行解码,而 tomcat10.1.7 默认使用UTF-8对URI进行解析,造成前后端使用的字符集不一致,出现乱码

1682386110151

三、乱码解决

方式一

设置GET方式提交的编码和Tomcat10.1.7的URI默认解析编码一致即可 (推荐)

1682386298048 1682386374464

方式2

设置Tomcat10.1.7的URI解析字符集和GET请求发送时所使用URL转码时的字符集一致即可,修改 conf/server.xmlConnecter 添加 URIEncoding="GBK" (不推荐)

Connector 是在配置 http/1.1协议 它的连接器

1682386551684

1682386611945

四、画图

image-20240729120749901

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值