Url传递参数和接收参数时的中文乱码处理

今天一个朋友又问及url传递中文参数,jsp接收参数时的乱码处理问题。

 

一、问题如下:

 Js提交代代码:

Var  name = "老罗";

var url = "testList.jsp?userName="+name;

Jsp中接收参数代码:

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

得到的userName结果成了“?

二、我给他的解决办法如下:

 Js提交代代码:

Var  name = "老罗";

var url = "testList.jsp?userName="+name;

   url=encodeURI(url); 

   url=encodeURI(url); 

Jsp中接收参数代码:

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

   userName = java.net.URLDecoder.decode(userName ,"UTF-8");   

得到的userName结果:“老罗”

 

在这里,为什么要在客户端对字符串重复编码两次呢?
    因为第一次编码,参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。 

再编一次后,提交,接收时容器自动解一次
       然后,再在程序中实现一次 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的参数的原值。

 

其实,一般情况下,  
   encodeURI使用的是 UTF-8 编码规则来编的.
如果 request.getParameter(paramName) ,容器也按 UTF-8 解的话,是正确的根本无须在客户端进行二次的 encodeURI(...)


如果 request.getParameter(paramName),容器没有按 UTF-8 解的话结果只有一个,就是乱码!
容器按什么编码来解码,决定于 request.setCharacterEncoding(***) 或者 服务器程序配置.

在 jsp 程序中,能够 request.setCharacterEncoding("UTF-8"), 并且 修改服务器配置,让容器在解 GET 提交的参数时,使用 UTF-8.
客户端提交前不用二次编码接收时,也只要直接 request.getParameter(paramName) 即可。
<!--EndFragment-->

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值