每日一得

          不求多得,只求一得 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 閱讀(652) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 灵山县| 同江市| 东阿县| 罗江县| 罗平县| 天门市| 图片| 滨州市| 富宁县| 荥阳市| 蒲江县| 宁远县| 贡觉县| 吴旗县| 九龙城区| 昌黎县| 廉江市| 丰都县| 福泉市| 台北县| 古浪县| 荣昌县| 分宜县| 梨树县| 博乐市| 武城县| 新安县| 台南市| 剑河县| 永定县| 三都| 南康市| 阜康市| 黄山市| 特克斯县| 怀宁县| 万源市| 繁峙县| 胶南市| 鹤壁市| 屏山县|