base64的編碼解碼的一些坑


1、

//編碼
 value = base64encode(utf16to8(src))
//解碼
 value = utf8to16(base64decode(src))

這里:base64編碼之前先轉成utf8,解碼出來的也要從utf-8轉為utf-16

2、base64編碼分為字符串編碼成字符串,字符串編碼成數組,字符串解碼成數組,字符串解碼成字符串,等

var startCmd2=[92,161,177,0,0,214,135];
var str = '';  
for(var i=0 , len=startCmd2.length ; i < len ;++i){  
    str += String.fromCharCode(startCmd2[i]);  

這是數組轉成字符串的方法,親測可用。

3、以下是我用到的字符串轉成字符串編碼方式:

function base64encode(str) {
            var out, i, len;
            var c1, c2, c3;
            len = str.length;
            i = 0;
            out = "";
            while(i < len) {
            c1 = str.charCodeAt(i++) & 0xff;
            if(i == len)
            {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt((c1 & 0x3) << 4);
                out += "==";
               break;
            }
            c2 = str.charCodeAt(i++);
            if(i == len)
            {
                out += base64EncodeChars.charAt(c1 >> 2);
                out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
                out += base64EncodeChars.charAt((c2 & 0xF) << 2);
                out += "=";
                break;
            }
            c3 = str.charCodeAt(i++);
            out += base64EncodeChars.charAt(c1 >> 2);
            out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
            out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
            out += base64EncodeChars.charAt(c3 & 0x3F);
            }
            return out;
        }

4、以下是我用到的字符串轉成數組解碼方式:

function decodeBase64(strIn){ 
            if(!strIn.length||strIn.length%4) 
            return null; 
            var str64= 
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 
            var index64=[]; 
            for(var i=0;i<str64.length;i++) 
            index64[str64.charAt(i)]=i; 
            var c0,c1,c2,c3,b0,b1,b2; 
            var len=strIn.length; 
            var len1=len; 
            if(strIn.charAt(len-1)=='=') 
            len1-=4; 
            var result=[]; 
            for(var i=0,j=0;i<len1;i+=4){ 
            c0=index64[strIn.charAt(i)]; 
            c1=index64[strIn.charAt(i+1)]; 
            c2=index64[strIn.charAt(i+2)]; 
            c3=index64[strIn.charAt(i+3)]; 
            b0=(c0<<2)|(c1>>4); 
            b1=(c1<<4)|(c2>>2); 
            b2=(c2<<6)|c3; 
            result.push(b0&0xff); 
            result.push(b1&0xff); 
            result.push(b2&0xff); 
            } 
            if(len1!=len){ 
            c0=index64[strIn.charAt(i)]; 
            c1=index64[strIn.charAt(i+1)]; 
            c2=strIn.charAt(i+2); 
            b0=(c0<<2)|(c1>>4); 
            result.push(b0&0xff); 
            if(c2!='='){ 
            c2=index64[c2]; 
            b1=(c1<<4)|(c2>>2); 
            result.push(b1&0xff); 
            } 
            } 
            return result; 
        }

如果需要utf-8和utf-16的轉換自行搜索吧……

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM