每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          key words: 腳本編碼 中文亂碼 js
          在jsp中,通過js訪問java代碼比較容易(不過,也有缺陷,比如java代碼的聲明必須先于js),反過來則不方便,網上看到有通過其他組件的方式來做,感覺也不是很好,其實平時用的更多的是在js中有中文編碼,而需要到下一個jsp頁面中得到這個對應的值。

          js中有函數escape和unescape,可惜的是java.net.*中的編碼和解碼與js的不一致,所以他們不能協同工作,有一個方法就是在java中重新實現一遍js里對應的方法,代碼如下:
          /**
          ?*?java版本的escape和?unescape[對應javaScript里的函數]
          ?
          */
          public?class?EscapeUnescape?{
          ????
          /**
          ?????*?escape?==>?escape
          ?????*?
          @param?src
          ?????*?
          @return?String
          ?????
          */
          ????
          public?static?String?escape(String?src)?{
          ????????
          int?i;
          ????????
          char?j;
          ????????StringBuffer?tmp?
          =?new?StringBuffer();
          ????????tmp.ensureCapacity(src.length()?
          *?6);
          ????????
          for?(i?=?0;?i?<?src.length();?i++)?{
          ????????????j?
          =?src.charAt(i);
          ????????????
          if?(Character.isDigit(j)?||?Character.isLowerCase(j)
          ????????????????????
          ||?Character.isUpperCase(j))
          ????????????????tmp.append(j);
          ????????????
          else?if?(j?<?256)?{
          ????????????????tmp.append(
          "%");
          ????????????????
          if?(j?<?16)
          ????????????????????tmp.append(
          "0");
          ????????????????tmp.append(Integer.toString(j,?
          16));
          ????????????}?
          else?{
          ????????????????tmp.append(
          "%u");
          ????????????????tmp.append(Integer.toString(j,?
          16));
          ????????????}
          ????????}
          ????????
          return?tmp.toString();
          ????}

          ????
          /**
          ?????*?unescape?===>js
          ?????*?
          @param?src
          ?????*?
          @return?String
          ?????
          */
          ????
          public?static?String?unescape(String?src)?{
          ????????StringBuffer?tmp?
          =?new?StringBuffer();
          ????????tmp.ensureCapacity(src.length());
          ????????
          int?lastPos?=?0,?pos?=?0;
          ????????
          char?ch;
          ????????
          while?(lastPos?<?src.length())?{
          ????????????pos?
          =?src.indexOf("%",?lastPos);
          ????????????
          if?(pos?==?lastPos)?{
          ????????????????
          if?(src.charAt(pos?+?1)?==?'u')?{
          ????????????????????ch?
          =?(char)?Integer.parseInt(src.substring(pos?+?2,?pos?+?6),?16);
          ????????????????????tmp.append(ch);
          ????????????????????lastPos?
          =?pos?+?6;
          ????????????????}?
          else?{
          ????????????????????ch?
          =?(char)?Integer.parseInt(src.substring(pos?+?1,?pos?+?3),?16);
          ????????????????????tmp.append(ch);
          ????????????????????lastPos?
          =?pos?+?3;
          ????????????????}
          ????????????}?
          else?{
          ????????????????
          if?(pos?==?-1)?{
          ????????????????????tmp.append(src.substring(lastPos));
          ????????????????????lastPos?
          =?src.length();
          ????????????????}?
          else?{
          ????????????????????tmp.append(src.substring(lastPos,?pos));
          ????????????????????lastPos?
          =?pos;
          ????????????????}
          ????????????}
          ????????}
          ????????
          return?tmp.toString();
          ????}
          }


          posted on 2006-08-21 18:02 Alex 閱讀(656) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 永靖县| 东乡县| 灌阳县| 那坡县| 陵川县| 苍梧县| 吴堡县| 开原市| 嘉黎县| 上高县| 阿拉尔市| 舟山市| 广宁县| 喀什市| 乌鲁木齐县| 安塞县| 茂名市| 米林县| 宜君县| 平果县| 韶关市| 三亚市| 宁阳县| 游戏| 芷江| 屯门区| 上林县| 莲花县| 洮南市| 惠安县| 仲巴县| 遂平县| 天台县| 古蔺县| 高清| 祁门县| 九龙坡区| 神池县| 仙居县| 夏津县| 吉水县|