最近快上线的新项目,在window平台上好好的,可是部署到Linux上就出现了部分乱码问题,费了一番周折才发现,凡是通过get方式传递的中文都会出现乱码现象,也怀疑是Linux系统编码的问题,或者是weblogic做过集群,可是但是自己不负责这块,安装系统和服务器的人也离开了,只好从程序下手了。
一开始找原因的时候,就从jsp页面的字符值着手,都是同一的GBK格式,在后来在Action做处理也不管用,然后想到把传递的中文字符编码成其他格式,然后通过解码方式在对其传递值进行解码。
传递的时候,是通过js获取值,然后传递的
A.jsp:parent.HiddFrame.location.href="../ywflcx/dwgjqkylb.jsp?dbname="+dbname+"&ndxz="+ndxz;
到另一个页面获取数据可是通过
B.jsp:request.getParameter("---");
C.jsp:nbzyForm.ndxz.value = "<c:out value="${param[ndxz]}"/>"; //jsp页面加载时赋值 function onLoad(){}
这样的话,我们在A页面做传递值编码,在B页面做传递值解码;
那么就要灵活的使用javascript和java工具类的相互编码及解码,因为你不知这个页面采用编码后,
1、下一个页可能是给一个From赋值 js
2、直接通过request获取 request
要知道前者可是通过js相应方式解码,后者可不行,因为使用request获取值时,jsp页面首先执行小脚本里面的内容,所以得采用java工具类解码。
----- JavaScript 方式编码、解码
/**
* 对传递值进行编码
* wenglin 2010-07-30
*/
function setEncodeURI(str){
var result = encodeURI(str);
result = encodeURI(result);
return result;
}
/**
* 对传递值进行解码
* wenglin 2010-07-30
*/
function setdecodeURI(str){
var result = decodeURI(str);
result = decodeURI(result);
return result;
}
------Java工具类编码、解码
/**
* 解码方法
* @param doStr
* @return
* @throws Exception
*@author wenglin 2010-07-30
*/
public static String doUrlDecoderStr(String doStr) throws Exception{
try {
String resultStr = "";
if(doStr != ""){
resultStr=new String(doStr.getBytes());
resultStr=java.net.URLDecoder.decode(resultStr,"UTF-8");//
}
return resultStr;
} catch (UnsupportedEncodingException e) {
throw new UnsupportedEncodingException("解码出错:UrlDecoderStrCommons"+e.getMessage());
}
}
/**
* 编码方法
* @param doStr
* @return
* @throws Exception
*@author wenglin 2010-07-30
*/
public static String doUrlEncoderStr(String doStr) throws Exception{
try {
String resultStr = "";
if(doStr != ""){
resultStr=new String(doStr.getBytes());
resultStr=java.net.URLEncoder.encode(resultStr, "UTF-8");//解码
}
return resultStr;
} catch (UnsupportedEncodingException e) {
throw new UnsupportedEncodingException("解码出错:UrlDecoderStrCommons"+e.getMessage());
}
}
这样,就可以根据情况相互编码,解码。