get方式url传递值是中文乱码JavaScript/Java工具类编码及解码互用

来源:互联网 发布:百度和知乎的区别 编辑:程序博客网 时间:2024/06/12 20:07

     最近快上线的新项目,在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());
  }
 
 }

  这样,就可以根据情况相互编码,解码。