zoukankan      html  css  js  c++  java
  • 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的转换自行搜索吧……

     

     
  • 相关阅读:
    【maven】maven源码打包
    【分布式事务】阿里fescar
    第五章 mybatis批量更新update
    第二十九章 springboot + zipkin + mysql
    第二十八章 springboot + zipkin(brave定制-AsyncHttpClient)
    第二十七章 springboot + zipkin(brave-okhttp实现)
    附8 zipkin
    第二十六章 hystrix-dashboard + turbine
    附7 turbine
    第二章 部署war包到tomcat
  • 原文地址:https://www.cnblogs.com/kaixin3946/p/5919029.html
Copyright © 2011-2022 走看看