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的转换自行搜索吧……

 

 
原文地址:https://www.cnblogs.com/kaixin3946/p/5919029.html