emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 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 閱讀(26195) 評(píng)論(17)  編輯  收藏 所屬分類: java技術(shù)

          評(píng)論

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

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

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

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

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

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

          # 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=中文,這個(gè)沒問題,把ISO-8859-1轉(zhuǎn)為GBK就可以了。  回復(fù)  更多評(píng)論
            

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

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

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

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

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

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

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

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

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

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

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

          主站蜘蛛池模板: 江西省| 寿阳县| 名山县| 门头沟区| 湛江市| 莒南县| 阿勒泰市| 平阳县| 浦城县| 吉林市| 伊春市| 东城区| 彰化市| 霍城县| 腾冲县| 菏泽市| 涞源县| 武汉市| 汝州市| 盐池县| 莱芜市| 大姚县| 柘城县| 和顺县| 兴山县| 新兴县| 满城县| 饶河县| 曲松县| 鄂温| 舒城县| 鹤壁市| 当阳市| 仙游县| 乐昌市| 平原县| 林西县| 疏勒县| 工布江达县| 赞皇县| 涞源县|