showmystage 发表于 2013-1-27 05:35:10

Jsp提交中文乱码解决方案

今天在程序版本更新之后,发现了一个bug,页面查询的时候,提交到后台的中文是乱码。之前用form表单提交,是没有问题的, 后来因为项目需要,只能刷新查询后的显示结果,所以就放在一个iframe里面。 这样一来,就只能用参数来提交了。
 
多方寻找资料,加之实践,终于找到了解决方案
首先,在提交的时候,先用javascript 把中文给转换成UTF-8的编码, 函数如下
 
function EncodeUtf8(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;      }            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){      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 ++)         {            retS += "%";            ss = tempS.substring(i * 8, (eval(i)+1)*8);                                                retS += sss.charAt(Dig2Dec(ss.substring(0,4)));            retS += sss.charAt(Dig2Dec(ss.substring(4,8)));         }         return retS;   }   return "";}  
 
 
 
 
 
 
 
var url = "abc.do?....."
url = url + "&brand=" + EncodeUtf8(document.getElementById("brand").value);
document.frames["downFrame"].location=url;
 
提交到后台之后
在action里面,定义一个函数,用于将 iso-88591  转换成 UTF-8
 
private static String convertStringToUTF(String str) {String returnString = "";if (str == null)return "";try {returnString = new String(str.getBytes("ISO-8859-1"), "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return returnString;} 
 
String str = convertStringToUTF(StringHelper.convertStringNull(request.getParameter("brand")));
 
 
这样,str就是中文了,可以用于数据库查询了
 
至此,问题顺利解决!
 
 
页: [1]
查看完整版本: Jsp提交中文乱码解决方案