首先是jsp页面获取地址栏的tableName中文值,
<%
String tableName = request.getParameter("tableName");
tableName = URLEncoder.encode(tableName,"iso-8859-1");//首先通过iso-8859-1进行编码
tableName = URLDecoder.decode(tableName,"utf-8");//再用utf-8解码,我的页面使用的utf-8编码
%>
将现在的tableName通过表单传到服务器,
取值为String tableName= request.getParameter(“tableName”);此时打印出来的tableName在控制台上是正常的。
但是要将tableName做为重定向的地址的参数,其重定向页面的地址栏中文为乱码,
再进行:
tableName = URLEncoder.encode(tableName,"utf-8");//首先通过utf-8进行编码
tableName = URLDecoder.decode(tableName,"iso-8859-1");//再用iso-8859-1解码,我的页面使用的utf-8编码
这样乱码问题解决了。
原本我页面使用的都是utf-8编码格式,但问题主要出在地址栏里面,地址栏里中文传递好像都是使用的ISO-8859-1的格式,所有有涉及到地址栏传递中文的,都要通过编码和解码两个步骤。
从JS里传URL到服务器,URL中有中文参数,服务器里读出的中文参数来的全是“?”,查了网上JS编码相关资料得以解决。
解决方法如下:
1、在JS里对中文参数进行两次转码
- var login_name = document.getElementById("loginname").value;
- login_name = encodeURI(login_name);
- login_name = encodeURI(login_name);
2、在服务器端对参数进行解码
- String loginName = ParamUtil.getString(request, "login_name");
- loginName = java.net.URLDecoder.decode(loginName,"UTF-8");
上面这个网上查的,用了还是乱码,后来将在js中的两次编码,删掉了一次,就一次编码,竟然可以用了
很纠结啊,这个乱码真是够乱的。