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

来源:互联网 发布:深夜食堂美知留出场 编辑:程序博客网 时间:2024/05/19 00:36

今天一个朋友又问及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) 即可

原创粉丝点击