我的工程中出现了url传参乱码的问题,通过baidu等,找到解决方法如下。
在接受参数的地方,通过
String name= new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
这样就可以将url编码转会utf-8,因为服务器传参时采用的是ISO-8859-1编码。
但是这样在tomcat下好使但是在工程部署的weblogic下依然会出现乱码。
原因我估计应该是weblogic使用的不是ISO-8859-1编码。为了让代码更通用一些,可以在传参前进行编码,之后再解嘛
传参前js中:
name= encodeURI(encodeURI(name));
//这里使用了两次编码,一次在tomcat下不好使,不过在weblogic是可以的,为了通用,试用了两次转码
接受参数的java:
String name= java.net.URLDecoder.decode(request.getParameter("name"),"UTF-8");
或者使用js解码:name = decodeURI("<%=ruleName%>")
这样在tomcat和weblogic下都好使。
参数“你好”
encodeURI("你好") %E4%BD%A0%E5%A5%BD
encodeURI(encodeURI("你好") ) %25E4%25BD%25A0%25E5%25A5%25BD
所以在经过url传参时,由于%号属于特殊字符,所以经过一次encodeURI编码后,%将和后面的数字组合进行转义,所以一次转码后会编程乱码,而两次转码后,%变成了%25,经过url传参后%25又被还原成%,成为一个合法的encodeURI编码的字符串,再经过转码就能正常显示了
方法二:
传参前js中:
name = escape(escape(name))
接受参数端:
String name= request.getParameter("name");
js name=unescape("<%=ruleName%>"));
方法三:
将上面的encodeURI改为encodeURIComponent也同样好使