get 乱码 无视服务器的默认编码 tomcat

13 篇文章 0 订阅
5 篇文章 0 订阅

javaweb开发中get乱码,网上很多都说用这个方法
String str = new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”);
其实不然,这是你指定了服务器的默认编码是ISO-8859-1,服务器要是其他编码仍然出现乱码,例如tomcat7前的都是ISO-8859-1,tomcat8开始却使用的UTF-8默认编码,所以还是没有解决,比如我换其他的web服务器呢
所以引用第二种解决办法:
对url进行2次编码,2次解码(一次服务器会帮我们做的,实际我们是进行一次解码)
具体实现:
一、web页面(有2中方式)
1、使用js的encodeURI来编码

encodeURI(encodeURI("中国"));

2、是jsp里使用

<%=java.net.URLEncoder.encode(java.net.URLEncoder.encode("中国","UTF-8"),"UTF-8")%>

二、服务器端解码处理

String name=request.getParameter("name");
String strName=URLDecoder.decode(name, "UTF-8");

原理和理解
两次encodeURI的原因总结(一句话,你见过字母和数字出现乱码的吗?从来没有,也不可能有)
下列子以中文“中国”来说明
第一次encodeURI得到的都是英文(它解码就会出现乱码)
中国 一次encodeURI编码–> %E4%B8%AD%E5%9B%BD 解码必须要知道是什么编码,否则肯定乱码
第二次encodeURI得到的仍然都是英文(它解码不可能出现乱码)
中国 二次encodeURI编码–> %25E4%25B8%25AD%25E5%259B%25BD 无论用什么来解码,肯定不会乱码(因为都是字母和数字)

编码了2次的数据发往服务器
服务器接收到数据了,
会以它默认的设置编码进行解码一次,
无论它以什么编码来解的码都不会乱码,因为都是字母和数字

然后我们得到数据了再以指定的编码来解码就不会乱码

原理图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值