小毅收藏之------Java式實現JS的Escape以及Unescape

          Posted on 2009-10-14 14:04 H2O 閱讀(1551) 評論(0)  編輯  收藏 所屬分類: java
          public class EscapeUnescape {

              
          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();
              }


              
          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();
              }


              
          public static void main(String[] args) {
                  String tmp 
          = "中文";
                  System.out.println(
          "testing escape : " + tmp);
                  tmp 
          = escape(tmp);
                  System.out.println(tmp);
                  System.out.println(
          "testing unescape :" + tmp);
                  System.out.println(unescape(
          "%u6211%u4eec"));
              }

          }

          以上為一個工具類,為解決中文亂碼
          html前臺:escape(escape('你好'))
          后臺:String txt=EscapeUnescape.unescape(aStringText); 

          escape本身參數編碼為ISO8859-1,escape中文傳替給servlet會直接為null接收不到,經過以上特殊處理即可解決!其他方法也可,如:手動轉碼...

          posts - 0, comments - 21, trackbacks - 0, articles - 101

          Copyright © H2O

          主站蜘蛛池模板: 苏尼特右旗| 长寿区| 乐昌市| 浦江县| 邻水| 怀集县| 密山市| 宕昌县| 龙海市| 慈溪市| 阆中市| 佛山市| 怀化市| 通江县| 毕节市| 万山特区| 崇州市| 永胜县| 焦作市| 汨罗市| 太康县| 金乡县| 康平县| 葫芦岛市| 长沙市| 睢宁县| 大名县| 三江| 平乐县| 巴里| 丽江市| 门头沟区| 湖南省| 馆陶县| 大关县| 甘孜| 舟山市| 海盐县| 闸北区| 永定县| 濮阳市|