<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
    java版本的escape和unescape函數(shù)

     

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

    posted on 2005-05-18 16:14 emu 閱讀(26194) 評論(17)  編輯  收藏 所屬分類: java技術(shù)

    評論

    # re: java版本的escape和unescape函數(shù) 2006-01-06 08:27 Fallingdown
    Good job!  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-01-06 20:07 cm4ever
    用java.net.Decoder這個類不行?  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-01-06 22:18 emu
    樓上說的是否是 java.net.URLDecoder / java.net.URLEncoder
    這兩個方法對應(yīng)的是javascript的 encodeURI/decodeURI 和 encodeURIComponent/decodeURIComponent 吧?
    我寫的兩個方法對應(yīng)的是javascript 的escape/unescape  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-01-07 00:42 cm4ever
    恩,明白你的意思了。不錯不錯。  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-08 11:23 tsroom
    好用,不過有沒有官方版本的標(biāo)準(zhǔn)類庫?
    還有,我在客戶端用java script 的escape處理的中文字段,怎么在request.getParamete取得不是亂碼也是null值呢?英文可以。
      回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-08 12:30 emu
    官方版本的標(biāo)準(zhǔn)類庫也是人寫的。除非在虛擬機內(nèi)部提供支持,否則他恐怕也只能做到這樣了。  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-27 14:44 javadolt
    我escape后傳過去的參數(shù)為NULL,而不進(jìn)行escape傳過去中文亂碼。我是用 http_request.send(data);傳送數(shù)據(jù)過去的。
    如果直接在url后面加?test=中文,這個沒問題,把ISO-8859-1轉(zhuǎn)為GBK就可以了。  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-27 17:13 emu
    escape后獲得null估計是因為參數(shù)名也被escape了,要不然就是?或者=或者&這幾個url的保留字符也被escape了。
    比如
    ?test=%u4E2D%u6587應(yīng)該是沒有問題的
    但是
    ?test%3D%u4E2D%u6587 肯定就不行了
    %3Ftest=%u4E2D%u6587 肯定也不對
    %3Ftest%3D%u4E2D%u6587 這就更不要說了。
    你是那種情形?
      回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-28 15:50 howard123456
    我也遇到escape以后參數(shù)值是null的情況了,可是我的參數(shù)名稱以及保留字符沒有被escape,:(  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-02-28 20:28 emu
    呵呵那就是用了send(data)方式post數(shù)據(jù)了吧,這就說來話長了。
    post數(shù)據(jù)的時候數(shù)據(jù)是自動按照utf-8編碼的,但是也接受urlencode方式編碼的二進(jìn)制數(shù)據(jù)。注意到urlencode的轉(zhuǎn)義符和escape是一樣的:%,但是他們代表的意思不同。urlencode的%XX代表的是XX這個16進(jìn)制數(shù)字的數(shù)據(jù),而escape的%XX代表的是ASCII碼為XX的一個字符(%uXXXX則代表Unicode碼為XXXX的一個unicode字符)。亂碼就此產(chǎn)生。  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-03-07 14:23 javadolt
    @emu
    呵呵那就是用了send(data)方式post數(shù)據(jù)了吧,這就說來話長了。 ……

    請問,那如何解決這種亂碼呢,謝謝?  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2006-03-23 11:29 emu
    網(wǎng)頁端需要urlencode編碼的時候,我們一般用vbs編碼,網(wǎng)上現(xiàn)成的代碼很多了。
    在不能用vbs(非IE瀏覽器)或者非簡體中文操作系統(tǒng)上,可以用字典法編碼,參見:
    http://m.tkk7.com/emu/articles/31756.html  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2008-11-13 21:44 云濤
    哥們,不錯!  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2010-02-06 21:49 seeeyou
    工作中一個問題 靠這個解決了 多謝  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2011-09-28 13:36 ll987_
    感謝!  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) 2012-03-10 14:15 李世榮
    樓主很強大,我成功的用這個解決了前臺傳后臺亂碼的問題,今天可以早點兒下班回家了  回復(fù)  更多評論
      

    # re: java版本的escape和unescape函數(shù) [未登錄] 2013-04-08 13:26 冬日的陽光
    這個的確可以用,太謝謝樓主了,幫了我大忙啊,謝謝  回復(fù)  更多評論
      

    主站蜘蛛池模板: 国拍在线精品视频免费观看| 吃奶摸下高潮60分钟免费视频| 国产精品亚洲片在线va| 成人免费午间影院在线观看| 黄色视屏在线免费播放| 久久久国产精品亚洲一区| 四虎影视在线永久免费观看| 日韩a级无码免费视频| 亚洲AV无码国产精品色| 亚洲精品97久久中文字幕无码| 日韩免费电影网站| 亚洲精品成a人在线观看☆| 亚洲日本va中文字幕久久| 成人免费午夜在线观看| 免费无码黄网站在线看| 美国毛片亚洲社区在线观看| 亚洲av无码片在线播放| 免费一级e一片在线播放| 99热这里有免费国产精品| 国产精品久久亚洲一区二区| 亚洲电影一区二区三区| 四虎永久在线精品免费观看地址| 久久久久久免费一区二区三区| 亚洲国产精品网站在线播放 | 无码av免费网站| 羞羞视频免费观看| 亚洲免费黄色网址| 亚洲欧洲无码AV电影在线观看 | 亚洲AV区无码字幕中文色| mm1313亚洲精品国产| 好爽…又高潮了毛片免费看 | 亚洲国产av无码精品| 女人18毛片水真多免费看| 亚洲免费视频网站| 久久久精品视频免费观看| 久久久久亚洲精品无码网址色欲| 亚洲精品午夜在线观看| 亚洲AV无码一区二区三区DV| 国产91精品一区二区麻豆亚洲 | 久久精品国产亚洲AV忘忧草18| 亚洲视频在线观看免费|