base64的编码解码的一些坑

摘要:
='='){c2=index64[c2];b1=|;result.push;}}returnresult;}如果需要utf-8和utf-16的转换自行搜索吧……

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、以下是我用到的字符串转成字符串编码方式:

functionbase64encode(str) {
            varout, i, len;
            varc1, 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);
            }
            returnout;
        }

4、以下是我用到的字符串转成数组解码方式:

functiondecodeBase64(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; 
            varc0,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); 
            } 
            } 
            returnresult; 
        }

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

免责声明:文章转载自《base64的编码解码的一些坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 怎么把查询到的数据从datatable用foreach循环加载到datagridview在C++中使用Windows API发送HTTP GET请求下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

html5对密码加密

今天找了几个关于对html5的密码加密的方法,仅供参考 1、base64加密:在页面中引入base64.js文件,调用方法为: <html> <head> <meta charset="utf-8"> <title>base64加密</title> <script type=...

字节流和字符流转换

任何数据的持久化和网络传输都是以字节形式进行的,所以字节流和字符流之间必然存在转换问题。字符转字节是编码过程,字节转字符是解码过程。io包中提供了InputStreamReader和OutputStreamWriter用于字符和字节的转换。 来看一个小例子: char[] charArr = new char[1]; StringBuffer sb...

【转】宽字节注入详解

前言在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等,还有一种情况是magic_quote_gpc,不过高版本的PHP将去除这个特性。 首先,宽字节注入与HTML页面编码是无关的,笔者曾经看到 &lt;meta charset=utf8&gt;...

asp.net(C#) 编码解码(HtmlEncode与HtmlEncode)

Default.aspx <%@PageValidateRequest="false"Language="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="test_Default"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Tr...

JavaScript:详解 Base64 编码和解码

  Base64是最常用的编码之一,比如开发中用于传递参数、现代浏览器中的<img />标签直接通过Base64字符串来渲染图片以及用于邮件中等等。Base64编码在RFC2045中定义,它被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。   我们知道,任何数据在计算机中都是以二进制的方式存储的...

音频编码器

16 音频编码器 介绍当前可用的音频编码器 aac AAC(Advanced Audio Coding )编码器 当前原生(内置)编码器还处于实验阶段,而且只能支持AAC-LC(低复杂度AAC)。要使用这个编码器,必须选择 ‘experimental’或者'lower' 因为当前还处于实验期,所以很多意外可能发生。如果需要一个更稳定的AAC编码器,参考li...