中文参数编码解码

在这里插入图片描述

request.setCharacterEncoding("utf-8");//改变了tomcat 的默认
表示tomcat使用UTF-8的方式解码浏览器传过来的utf8字节码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
表示用UTF-8显示中文,同时浏览器也会使用UTF-8编码提交中文,
这句话的目的是告诉浏览器,等下发消息给服务器的时候,使用UTF-8编码,变成字节码给tomcat

这句话加上去以后,浏览器把输入的参数编码成utf-8的字节发送给了tomcat
tomcat对于post提交的数据默认的编码方式是ISO-8859-1,也就是它用ISO-8859-1解析了utf-8编码之后的字节。
String name=request.getParameter(“username”);
这里传递给name的就是被错误解码之后的乱码。
但是由于ISO-8859-1是单字节编码。
所以byte[] bytes= name.getBytes(“ISO-8859-1”);进行重新编码可以得到没有被tomcat解析过的utf8字节串。
然后再用utf-8解码就能得到本来的数据了。
要了解如下几点,才能理解透彻

  1. 编码 和 解码 是什么,用utf-8来举例:
    阿伦 → &#x963F;&#x4F26; 由左到右的过程,叫编码
    阿伦 ← &#x963F;&#x4F26; 由右到左的过程,叫解码

2.编码和解码的方式必须一样才能避免出现乱码
假如你用utf-8编码,却用gbk来解码,那显示出来就会是乱码

3.tomcat接收到字符码之后,会直接采用ISO-8859-1方式进行解码(这是它的默认机制)
例如:
用户输入“阿伦”,浏览器采用utf-8将其编码为 &#x963F;&#x4F26; 然后发给tomcat
tomcat理应用同样的utf-8来解码,但它不管不顾,依旧采用自己ISO的方式来解码,
比如解码成了 ^-^ 然后显示出来, 这就是所谓的乱码。
程序员的解决办法就是先用tomcat的ISO方式再将 ^-^ 编码,恢复成 &#x963F;&#x4F26;
然后再用浏览器的utf-8方式将 阿伦 解码, 就成功得到了 “阿伦”
整个流程: “阿伦” → &#x963F;&#x4F26;^-^&#x963F;&#x4F26; → 阿伦

返回中文的响应:
在这里插入图片描述

Get限制Form表单的数据集的值必须为ASCII字符(也就是说不能有中文);而Post支持整个ISO10646字符集。默认是用ISO-8859-1编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值