[javascript] 클라이언트 측 Javascript의 Base64 인코딩 및 디코딩

base64 인코딩을 사용하여 문자열을 인코딩하고 디코딩하는 데 사용할 수있는 JavaScript의 메소드가 있습니까?



답변

Firefox, Chrome, Safari, Opera 및 IE10 +와 같은 일부 브라우저는 기본적으로 Base64를 처리 할 수 ​​있습니다. 이 Stackoverflow 질문을 살펴보십시오 . 사용 btoa()하고 atob()기능 합니다.

서버 측 JavaScript (노드)의 경우 Buffers를 사용 하여 디코딩 할 수 있습니다 .

크로스 브라우저 솔루션을 사용 하려는 경우 CryptoJS 와 같은 기존 라이브러리 또는 다음과 같은 코드가 있습니다.

http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html

후자를 사용하면 크로스 브라우저 호환성을 위해 기능을 철저히 테스트해야합니다. 그리고 오류 가 이미보고되었습니다 .


답변

Gecko / WebKit 기반 브라우저 (Firefox, Chrome 및 Safari) 및 Opera에서 btoa ()atob ()을 사용할 수 있습니다 .

원래 답변 : JavaScript에서 문자열을 Base64로 인코딩하는 방법은 무엇입니까?


답변

Internet Explorer 10 이상

// Define the string
var string = 'Hello World!';

// Encode the String
var encodedString = btoa(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"

// Decode the String
var decodedString = atob(encodedString);
console.log(decodedString); // Outputs: "Hello World!"

크로스 브라우저

AMD, CommonJS, Nodejs 및 브라우저 용 UTF-8 및 Base64 Javascript 인코딩 및 디코딩 라이브러리 / 모듈을 다시 작성하고 모듈화했습니다. 크로스 브라우저 호환


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)

바우처 설치 앵귤러베이스 64

<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=');
}]);

그러나 어떻게?

base64가 일반적으로 인코딩되고 특히 JavaScript에서 인코딩되는 방법에 대해 더 배우고 싶다면이 기사를 추천합니다 : JavaScript의 컴퓨터 과학 : Base64 인코딩


답변

스나이퍼 포스트의 강화 버전입니다. 캐리지 리턴이없는 잘 구성된 base64 문자열을 가정합니다. 이 버전은 두 개의 루프를 제거하고 &0xffYaroslav 의 수정 사항을 추가하며 후행 null과 코드 골프를 제거합니다.

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;
};


답변

페일 세이프가없는 짧고 빠른 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;
}


답변

function b64_to_utf8( str ) {
  return decodeURIComponent(escape(window.atob( str )));
}

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_.22Unicode_Problem.22


답변

php.js의 프로젝트는 PHP의 기능 중 많은 자바 스크립트 구현이 있습니다. base64_encode그리고 base64_decode포함되어 있습니다.