Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端Javascript中的Base64编码和解码_Javascript_Base64 - Fatal编程技术网

客户端Javascript中的Base64编码和解码

客户端Javascript中的Base64编码和解码,javascript,base64,Javascript,Base64,JavaScript中是否有任何方法可用于使用base64编码对字符串进行编码和解码?一些浏览器,如Firefox、Chrome、Safari、Opera和IE10+可以本机处理base64。看看这个。它正在使用 对于服务器端JavaScript(节点),可以使用Buffers进行解码 如果您打算采用跨浏览器解决方案,那么现有的库包括: 对于后者,您需要彻底测试该函数的跨浏览器兼容性。和错误。该项目有许多PHP函数的JavaScript实现base64_编码和base64_解码。短而快速的ba

JavaScript中是否有任何方法可用于使用base64编码对字符串进行编码和解码?

一些浏览器,如Firefox、Chrome、Safari、Opera和IE10+可以本机处理base64。看看这个。它正在使用

对于服务器端JavaScript(节点),可以使用
Buffer
s进行解码

如果您打算采用跨浏览器解决方案,那么现有的库包括:


对于后者,您需要彻底测试该函数的跨浏览器兼容性。和错误。

该项目有许多PHP函数的JavaScript实现<包括code>base64_编码和
base64_解码

短而快速的base64 JavaScript解码功能,无故障保护:

function decode_base64 (s)
{
    var e = {}, i, k, v = [], r = '', w = String.fromCharCode;
    var n = [[65, 91], [97, 123], [48, 58], [43, 44], [47, 48]];

    for (z in n)
    {
        for (i = n[z][0]; i < n[z][1]; i++)
        {
            v.push(w(i));
        }
    }
    for (i = 0; i < 64; i++)
    {
        e[v[i]] = i;
    }

    for (i = 0; i < s.length; i+=72)
    {
        var b = 0, c, x, l = 0, o = s.substring(i, i+72);
        for (x = 0; x < o.length; x++)
        {
            c = e[o.charAt(x)];
            b = (b << 6) + c;
            l += 6;
            while (l >= 8)
            {
                r += w((b >>> (l -= 8)) % 256);
            }
         }
    }
    return r;
}
函数解码\u base64(s)
{
变量e={},i,k,v=[],r='',w=String.fromCharCode;
变量n=[[65,91],[97123],[48,58],[43,44],[47,48];
for(n中的z)
{
对于(i=n[z][0];i>>(l-=8))%256);
}
}
}
返回r;
}

在基于Gecko/WebKit的浏览器(Firefox、Chrome和Safari)和Opera中,您可以使用和


原始答案:

我在phpjs.org上尝试了Javascript例程,它们运行得很好

我首先尝试了Ranhiru Cooray在选择的答案中建议的惯例-

我发现它们并非在所有情况下都有效。我编写了一个测试用例,其中这些例程失败,并将它们发布到GitHub:


我还在ntt.cc上的博客帖子上发表了一条评论,提醒作者(等待审核-这篇文章太旧了,所以不确定是否会发表评论)。

这里是一个更严格的狙击手帖子版本。它假定格式良好的base64字符串没有回车符。这个版本消除了几个循环,添加了Yaroslav的
&0xff
修复,消除了尾部的空值,再加上一些代码

decodeBase64 = function(s) {
    var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
    var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    for(i=0;i<64;i++){e[A.charAt(i)]=i;}
    for(x=0;x<L;x++){
        c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
        while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
    }
    return r;
};
decodeBase64=函数{
变量e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,l=s.length;
var A=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyzo123456789+/”;

对于(i=0;i(l-=8))&0xff)| |(x我宁愿使用最流行的bas64编码/解码方法库,该库用于使用最佳实践和模式在JavaScript中实现的标准和安全加密算法。

有人说代码高尔夫吗?=)

以下是我在追赶时代的同时改善我的残疾的尝试。为您提供方便

function decode_base64(s) {
  var b=l=0, r='',
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  s.split('').forEach(function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  });
  return r;
}
@牙刷建议“像数组一样索引字符串”,并摆脱
拆分
。这个程序看起来很奇怪,不确定它的兼容性如何,但它确实击中了另一只小鸟,所以让我们来做吧

function decode_base64(s) {
  var b=l=0, r='',
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  [].forEach.call(s, function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  });
  return r;
}
然而,如果你想找一些更传统的东西,也许下面的内容更符合你的口味

function decode_base64(s) {
  var b=l=0, r='', s=s.split(''), i,
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  for (i in s) {
    b=(b<<6)+m.indexOf(s[i]); l+=6;
    if (l>=8) r+=String.fromCharCode((b>>>(l-=8))&0xff);
  }
  return r;
}
注: 结果是一个ascii字节字符串,如果您需要unicode,最简单的方法是
转义
字节字符串,然后可以使用
decodeURIComponent
对其进行解码以生成unicode字符串

function decode_base64_usc(s) {      
  return decodeURIComponent(escape(decode_base64(s)));
}
由于
escape
被弃用,我们可以将函数更改为直接支持unicode,而不需要
escape
String。从charcode
我们可以生成一个
%
转义字符串,以备URI解码

function decode_base64(s) {
  var b=l=0,
  m='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  return decodeURIComponent(s.replace(/./g, function (v) {
    b=(b<<6)+m.indexOf(v); l+=6;
    return l<8?'':'%'+(0x100+((b>>>(l-=8))&0xff)).toString(16).slice(-2);
  }));
}
函数解码\u base64(s){
var b=l=0,
m='ABCDEFGHIJKLMNOPQRSTUVWXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789+/';
返回部件(s.replace)(//g,功能(v){
b=(b(l-=8))&0xff)).toString(16.slice(-2);
}));
}
nJoy!

Internet Explorer 10+
跨浏览器


使用Node.js 以下是如何在Node.js中将普通文本编码为base64:

//Buffer() requires a number, array or string as the first parameter, and an optional encoding type as the second parameter. 
// Default is utf8, possible encoding types are ascii, utf8, ucs2, base64, binary, and hex
var b = new Buffer('JavaScript');
// If we don't use toString(), JavaScript assumes we want to convert the object to utf8.
// We can make it convert to other formats by passing the encoding type to toString().
var s = b.toString('base64');
下面是如何解码base64编码字符串:

var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString();

使用Dojo.js 要使用dojox.encoding.base64对字节数组进行编码,请执行以下操作:

var str = dojox.encoding.base64.encode(myByteArray);
要解码base64编码字符串,请执行以下操作:

var bytes = dojox.encoding.base64.decode(str)

bower安装角形底座64

有棱角的
.module('myApp',['base64']))
.controller('myController'[
“$base64”、“$scope”,
函数($base64$scope){
$scope.encoded=$base64.encode('a string');
$scope.decoded=$base64.decode('YSBzdHJpbmc=');
}]);

但是怎么做呢? 如果您想进一步了解base64的一般编码方式,特别是JavaScript编码方式,我建议您阅读本文:

功能b64到utf8(str){
返回解码组件(escape(window.atob(str));

}
在Node.js中,我们可以用简单的方式完成

var base64 = 'SGVsbG8gV29ybGQ='
var base64_decode = new Buffer(base64, 'base64').toString('ascii');

console.log(base64_decode); // "Hello World"

对于没有方法的JavaScripts框架,如果您不想导入外部库,这是一个简短的函数

它将获得一个包含Base64编码值的字符串,并将返回一个已解码的字节数组(其中字节数组表示为数字数组,其中每个数字都是0到255(含0到255)之间的整数)

来自base64string(str)的函数{ varα= “ABCDEFGHIJKLMNOPQRSTUVWXYZABDEFGHIJKLMNOPQRSTUVXYZ0123456789+/”; var值=[]; var指数=0; var destIndex=0; var=false; while(true){ var first=getNextChr(str、index、padding、alpha); var second=getNextChr(str,first.nextIndex,first.padding,alpha); var third=getNextChr(str,second.nextIndex,second.padding,alpha); var fourth=getNextChr(str,third.nextIndex,third.padding,alpha); 指数=4th.nextIndex; padding=fourth.padding; //FFFFFF SS sssstttt ttffffff var base64_first=first.code==nul
var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')
var s = b.toString();
var str = dojox.encoding.base64.encode(myByteArray);
var bytes = dojox.encoding.base64.decode(str)
<script src="bower_components/angular-base64/angular-base64.js"></script>

angular
    .module('myApp', ['base64'])
    .controller('myController', [

    '$base64', '$scope', 
    function($base64, $scope) {
    
        $scope.encoded = $base64.encode('a string');
        $scope.decoded = $base64.decode('YSBzdHJpbmc=');
}]);
var base64 = 'SGVsbG8gV29ybGQ='
var base64_decode = new Buffer(base64, 'base64').toString('ascii');

console.log(base64_decode); // "Hello World"
function base64_encode(s) {      
    return btoa(unescape(encodeURIComponent(s)));
}
function base64_decode(s) {      
    return decodeURIComponent(escape(atob(s)));
}
decode_base64=function(f){var g={},b=65,d=0,a,c=0,h,e="",k=String.fromCharCode,l=f.length;for(a="";91>b;)a+=k(b++);a+=a.toLowerCase()+"0123456789+/";for(b=0;64>b;b++)g[a.charAt(b)]=b;for(a=0;a<l;a++)for(b=g[f.charAt(a)],d=(d<<6)+b,c+=6;8<=c;)((h=d>>>(c-=8)&255)||a<l-2)&&(e+=k(h));return e};
sDOS2Win = function(sText, bInsideOut) {
    var aCharsets = ["iso-8859-1", "windows-1251"];
    sText += "";
    bInsideOut = bInsideOut ? 1 : 0;
    with (new ActiveXObject("ADODB.Stream")) { //http://www.w3schools.com/ado/ado_ref_stream.asp
        type = 2; //Binary 1, Text 2 (default) 
        mode = 3; //Permissions have not been set 0,  Read-only 1,  Write-only 2,  Read-write 3,  
        //Prevent other read 4,  Prevent other write 8,  Prevent other open 12,  Allow others all 16
        charset = aCharsets[bInsideOut]; 
        open();
        writeText(sText);
        position = 0;
        charset = aCharsets[1 - bInsideOut];
        return readText();
    }
}
var base64='0PPx8ero5SDh8+ru4uroIQ=='
text = sDOS2Win(decode_base64(base64), false );
WScript.Echo(text)
var x=WScript.StdIn.ReadLine();