最近快上線的新項目,在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());
}
}
這樣,就可以根據情況相互編碼,解碼。