六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 37|回复: 0

Jsp提交中文乱码解决方案

[复制链接]

升级  58%

7

主题

7

主题

7

主题

童生

Rank: 1

积分
29
 楼主| 发表于 2013-1-27 05:35:10 | 显示全部楼层 |阅读模式
今天在程序版本更新之后,发现了一个bug,页面查询的时候,提交到后台的中文是乱码。之前用form表单提交,是没有问题的, 后来因为项目需要,只能刷新查询后的显示结果,所以就放在一个iframe里面。 这样一来,就只能用参数来提交了。
 
多方寻找资料,加之实践,终于找到了解决方案
首先,在提交的时候,先用javascript 把中文给转换成UTF-8的编码, 函数如下
 
function EncodeUtf8(s1)  {      var s = escape(s1);      var sa = s.split("%");      var retV ="";      if(sa[0] != "")      {         retV = sa[0];      }      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就是中文了,可以用于数据库查询了
 
至此,问题顺利解决!
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表