·¢²©ÎÄ
40 come to play FreeBSD

hoodng.blog.chinaunix.net

Programming the life, the life is programming   
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º124189
  • ²©ÎÄÊýÁ¿£º71
  • ²©¿Í»ý·Ö£º1864
  • ²©¿ÍµÈ¼¶£ºÉÏξ
  • ¹Ø×¢ÈËÆø£º 3
  • ×¢²áʱ¼ä£º2006-12-29 01:33:48
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
±êÇ©Base64  Javascript  ·ÖÀࣺ JavaScript


    ½ñÌì¸üв©¿Íʱ£¬Ë³±ã·­¿´ÁËÒ»ÏÂÒÔǰдµÄµÄ¶«Î÷£¬·¢ÏÖ08ÄêдµÄһƪÓÃJavascript½øÐÐBase64±àÂë´«ËÍÊý¾ÝµÄÎÄÕ¡£ËµÊµÔڵ쬵±³õдÕâÆª¶«Î÷µÄʱºò£¬×Ô¼º¼¸ºõÊDz»¶®JavascriptµÄ£¬Ö»ÊÇ¿´µ½¹«Ë¾µÄ²úÆ·ÔÚÓ¦¶Ô¸÷ÖÖLocation, LanguageÒÔ¼°¸÷ÖÖÒ³Ãæ±àÂëÉèÖ㬴æÔÚ´óÁ¿µÄbugʱ£¬ÓÐÐij¢ÊÔÒ»ÏÂÓÃBase64½â¾öµÄ¿ÉÄÜÐÔ£¬¶ø×îÖÕ²¢Ã»ÓÐÔÚ²úÆ·ÖвÉÓá£

    
    ¶øÈç½ñ£¨ÎÒÖ¸µÄÊÇÈýÄêºóµÄ½ñÌ죩£¬ÎÒÃǵÄÈ·ÔÚ×îеIJúÆ·ÖУ¬³É¹¦Ê¹ÓÃÁËÕâÒ»·½°¸£¬²¢³¹µ×°ÚÍÑÁ˸÷ÖÖ±àÂë´«Ë͵ÄÎÊÌâ¡£Ëã·¨·½Ã滹ÊǺÍÒÔǰһģһÑù£¬Ö»²»¹ý£¬ÐÔÄÜÉÏ×öÁ˾ֲ¿ÓÅ»¯£¬²¢ÔÚ·â×°ÐÎʽÉÏÓÐЩ±ä»¯£¬Ò»ÈçÎÒÌᳫµÄJavascriptÓÃJava likeµÄ·ç¸ñÀ´Ð´³öJava³ÌÐòÔ±¿ÉÒÔά»¤µÄ´úÂëÒ»Ñù£¬·â×°³öÒ»¸öjs.util.Base64Àࣺ

  1. $package("js.util");

  2. js.util.Base64 = new function (){
  3.     var base64chars = "ABCDEFGHIJKLMNOP" +
  4.         "QRSTUVWXYZabcdef"+
  5.         "ghijklmnopqrstuv"+
  6.         "wxyz0123456789@*"+
  7.         "-";

  8.     /**
  9.      * Encode a string to a Base64 string follow Bse64 regular.
  10.      * @param s, a normal string
  11.      * @return a Base64 string
  12.      */
  13.     this.encode = function(s){
  14.         if(!s || s.length == 0) return s;

  15.         var d = [], b = ucs2_utf8(s), len = b.length,
  16.         b0, b1, b2, b3, i = 0, tmp;

  17.         while(i < len){
  18.             tmp = b[i++];
  19.             b0 = (tmp & 0xfc) >> 2;
  20.             b1 = (tmp & 0x03) << 4;
  21.             if(i < len){
  22.                 tmp = b[i++];
  23.                 b1 |= (tmp & 0xf0) >> 4;
  24.                 b2 = (tmp & 0x0f) << 2;
  25.                 if(i< len){
  26.                     tmp = b[i++];
  27.                     b2 |= (tmp & 0xc0) >> 6;
  28.                     b3 = tmp & 0x3f;
  29.                 }else{
  30.                     b3 = 64; // 1 byte "-" is supplement

  31.                 }
  32.             }else{
  33.                 b2 = b3 = 64; // 2 bytes "-" are supplement

  34.             }

  35.             d.push(base64chars.charAt(b0));
  36.             d.push(base64chars.charAt(b1));
  37.             d.push(base64chars.charAt(b2));
  38.             d.push(base64chars.charAt(b3));
  39.         }

  40.         return d.join("");
  41.     };

  42.     /**
  43.      * Decode a Base64 string to a string follow Base64 regular.
  44.      * @param s, a Base64 string
  45.      * @return a normal string
  46.      */
  47.     this.decode = function(s){
  48.         if(!s) return null;

  49.         var len = s.length;
  50.         if(len%4 != 0)
  51.             throw new Error(s+" is not a valid Base64 string.");

  52.         var b = [], i=0, j=0, e=0, c, tmp;
  53.         while(i < len){
  54.             c = base64chars.indexOf(s.charAt(i++));
  55.             tmp = c << 18;
  56.             c = base64chars.indexOf(s.charAt(i++));
  57.             tmp |= c << 12;
  58.             c = base64chars.indexOf(s.charAt(i++));
  59.             if(c < 64){
  60.                 tmp |= c << 6;
  61.                 c = base64chars.indexOf(s.charAt(i++));
  62.                 if(c < 64){
  63.                     tmp |= c;
  64.                 }else{
  65.                     e = 1;
  66.                 }
  67.             }else{
  68.                 e = 2;
  69.                 i++;
  70.             }

  71.             b[j+2] = tmp & 0xff;
  72.             tmp >>= 8;
  73.             b[j+1] = tmp & 0xff;
  74.             tmp >>= 8;
  75.             b[j+0] = tmp & 0xff;
  76.             j += 3;
  77.             
  78.         }
  79.         
  80.         b.splice(b.length-e, e);

  81.         return utf8_ucs2(b);
  82.         
  83.     };

  84.     /**
  85.      * Encodes a utf8 integer array to a ucs2 string.
  86.      * @param s, an integer array
  87.      * @return a string
  88.      */
  89.     var utf8_ucs2 = function(s){
  90.         if(!s) return null;
  91.         var len = s.length;
  92.         if(len == 0) return "";

  93.         var d = [], c = 0, i = 0, tmp = 0;
  94.         while(i < len){
  95.             c = s[i++];
  96.             if((c & 0xe0) == 0xe0){
  97.                 // 3 bytes

  98.                 tmp = (c & 0x0f) << 12;
  99.                 c = s[i++];
  100.                 tmp |= ((c & 0x3f) << 6);
  101.                 c = s[i++];
  102.                 tmp |= (c & 0x3f);
  103.             }else
  104.                 if((c & 0xc0) == 0xc0){
  105.                     // 2 bytes

  106.                     tmp = (c & 0x1f) << 6;
  107.                     c = s[i++];
  108.                     tmp |= (c & 0x3f);
  109.                 }else{
  110.                     // 1 byte

  111.                     tmp = c;
  112.                 }
  113.             
  114.             d.push(String.fromCharCode(tmp));
  115.         }
  116.         
  117.         return d.join("");
  118.     };

  119.     /**
  120.      * Encodes a ucs2 string to a utf8 integer array.
  121.      * @param s, a string
  122.      * @return an integer array
  123.      */
  124.     var ucs2_utf8 = function(s){
  125.         if (!s) return null;
  126.         var d = [];
  127.         if (s == "") return d;

  128.         var c = 0, i = 0, j = 0, len = s.length;
  129.         while(i < len){
  130.             c = s.charCodeAt(i++);
  131.             if(c <= 0x7f){
  132.                 // 1 byte

  133.                 d[j++] = c;
  134.             }else
  135.                 if((c >= 0x80) && (c <= 0x7ff)){
  136.                     // 2 bytes

  137.                     d[j++] = ((c >> 6) & 0x1f) | 0xc0;
  138.                     d[j++] = (c & 0x3f) | 0x80;
  139.                 }else{
  140.                     // 3 bytes

  141.                     d[j++] = (c >> 12) | 0xe0;
  142.                     d[j++] = ((c >> 6) & 0x3f) | 0x80;
  143.                     d[j++] = (c & 0x3f) | 0x80;
  144.                 }
  145.         }
  146.         
  147.         return d;
  148.     };

  149. }();

²©¿ÍÍÆ¼öÎÄÕÂ
[·¢ÆÀÂÛ] ÆÀÂÛ ÖØÒªÌáʾ£º¾¯ÌèÐé¼ÙÖн±ÐÅÏ¢!
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ