tupi 发表于 2013-1-27 05:03:35

编码问题

编码问题
<strong style="" />
A 在struts 框架下通过GET方法传中文参数时,如果中文没有经过特殊处理,在action中进行解码时,会出现奇偶问题。<strong style="" />
解决办法:可以先在jsp页面中把中文参数用脚本(参看附件1)编译为UTF-8编码,再在action中进行解码。String str = new String(param.getBytes(“ISO-8859-1”),”UTF-8”) 或者String str = new String(param.getBytes(“ISO-8859-1”),”GBK”)
B 在struts 框架下通过XMLHttp 的GET方法传中文参数:只要在action中进行这种方式解码:String str = new String(param.getBytes(“ISO-8859-1”)) 。
 
C 在struts 框架下通过Page 分页控件 的GET方法传中文参数:只要在action中进行这种方式解码:String str = new String(param.getBytes(“ISO-8859-1”),”GBK”) 。
 
note:重新构建的字符对象的后边参数都是取决于中间件在对GET方式时对中文字符用什么方式编码。
 
 
 
 
附件:
 
1(转载)
 

//转成UTF-8
function EncodeUtf8(desId,s1)
  {
      var s = escape(s1);
      var sa = s.split("%");
      var retV ="";
      if(sa != "")
      {
         retV = sa;
      }
      for(var i = 1; i < sa.length; i ++)
      {
           if(sa.substring(0,1) == "u")
           {
               retV += Hex2Utf8(Str2Hex(sa.substring(1,5)));
              
           }
           else retV += "%" + sa;
      }
     
         if(desId!=""){
            document.getElementById(desId).value=retV;
         }
     
      return retV;
  }
  function Str2Hex(s)
  {
      var c = "";
      var n;
      var ss = "0123456789ABCDEF";
      var digS = "";
      for(var i = 0; i < s.length; i ++)
      {
         c = s.charAt(i);
         n = ss.indexOf(c);
         digS += Dec2Dig(eval(n));
          
      }
      //return value;
      return digS;
  }
  function Dec2Dig(n1)
<span style=""> 
  {
      var s = "";
      var n2 = 0;
      for(var i = 0; i < 4; i++)
      {
         n2 = Math.pow(2,3 - i);
         if(n1 >= n2)
         {
            s += '1';
            n1 = n1 - n2;
          }
         else
          s += '0';
         
      }
      return s;
     
  }
  function Dig2Dec(s)
  {
      var retV = 0;
      if(s.length == 4)
      {
          for(var i = 0; i < 4; i ++)
          {
              retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
          }
          return retV;
      }
      return -1;
  }
  function Hex2Utf8(s)
  {
     var retS = "";
     var tempS = "";
     var ss = "";
     if(s.length == 16)
     {
         tempS = "1110" + s.substring(0, 4);
         tempS += "10" +  s.substring(4, 10);
         tempS += "10" + s.substring(10,16);
         var sss = "0123456789ABCDEF";
         for(var i = 0; i < 3; i ++)
         {
<span style=""><span style=""><span style=""> 
            retS += "%";<span style="" />
            ss = tempS.substring(i * 8, (eval(i)+1)*8);<span style="" />
            retS += sss.charAt(Dig2Dec(ss.substring(0,4)));<span style="" />
            retS += sss.charAt(Dig2Dec(ss.substring(4,8)));<span style="" />
         }<span style="" />
         return retS;
     }
     return "";
  }
 
页: [1]
查看完整版本: 编码问题