在 tomcat 下 请求参数的乱码问题

请求参数的乱码问题

问题描述: 在通过request对象获取请求参数时, 如果参数中有中文数据, 在获取时就会出现乱码, 其原因是由于浏览器发送参数时(编码时)使用的码表 和 服务器在结束数据时(解码时)使用的码表不一致造成的!

(1)  浏览器发送数据时使用的码表: 浏览器在发送数据时使用的码表取决于打开页面时使用的码表, 即浏览器使用什么编码打开页面, 就会使用相同的编码来发送数据. 这里使用的是utf-8这个码表!

(2)  服务器接收数据时使用的码表: 服务器在接收数据时默认使用iso8859-1来接收请求参数

 

解决方案:让编码时使用的码表和解码时使用的码表保持一致即可!!!

 

可以通过手动编解码来解决乱码!!

(1)  根据获取到的乱码字符串, 反向编码得回正确的二进制数据

String username = request.getParameter("username");

//将乱码逆向编码转回二进制数组

byte[] bytes = username.getByte("iso8859-1");

(2)  将二进制数组查询utf-8码表转成字符串, 得回正确的数据

//手动编码,将二进制数组转成字符(查询 utf-8 这个码表)

username = new String(bytes,"utf-8");


如果发送请求的方式是POST提交, 还可以通过request提供的方法来解决乱码:

request.setCharacterEncoding(“utf-8”); 这行代码是通知服务器使用utf-8来接收请求实体内容中的数据.

由于POST提交的参数刚好在请求实体内容中, 所以这行代码可以解决POST提交时产生乱码问题.

/*

* 这行代码是通知服务器使用utf-8来接收请求实体
*  内容中的数据, 所以对POST提交的乱码起作用!
* 这行代码必须放在任何获取参数的代码之前执行
*/
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");

但是由于GET提交的参数在请求行中的请求资源路径后面拼接着,不在请求实体内容中, 所有这行代码对GET提交产生的乱码不会起作用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值