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