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

          Posted on 2009-10-14 14:04 H2O 閱讀(1552) 評論(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

          主站蜘蛛池模板: 汝城县| 安吉县| 滕州市| 始兴县| 延长县| 乌兰浩特市| 芮城县| 平阳县| 察雅县| 崇信县| 凉城县| 临猗县| 敖汉旗| 东阳市| 盱眙县| 靖江市| 辛集市| 同德县| 兴业县| 邹城市| 霞浦县| 尚义县| 旺苍县| 辽源市| 汽车| 宁陵县| 嘉义市| 卢龙县| 章丘市| 施甸县| 延吉市| 沾化县| 喀喇| 泰和县| 富民县| 舟曲县| 尉犁县| 明光市| 卫辉市| 湘潭县| 湘乡市|