- Notifications
You must be signed in to change notification settings - Fork1.3k
Base64 implementation for JavaScript
License
dankogai/js-base64
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Yet anotherBase64 transcoder.
$ npm install --save js-base64
Locally…
<scriptsrc="base64.js"></script>
… or Directly from CDN. In which case you don't even need to install.
<scriptsrc="https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.min.js"></script>
This good old way loadsBase64
in the global context (window
). ThoughBase64.noConflict()
is made available, you should consider using ES6 Module to avoid taintingwindow
.
locally…
import{Base64}from'js-base64';
// or if you prefer no Base64 namespaceimport{encode,decode}from'js-base64';
or even remotely.
<scripttype="module">// note jsdelivr.net does not automatically minify .mjsimport{Base64}from'https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.mjs';</script>
<scripttype="module">// or if you prefer no Base64 namespaceimport{encode,decode}from'https://cdn.jsdelivr.net/npm/js-base64@3.7.7/base64.mjs';</script>
const{Base64}=require('js-base64');
Unlike the case above, the global context is no longer modified.
You can also useesm toimport
instead ofrequire
.
require=require('esm')(module);import{Base64}from'js-base64';
letlatin='dankogai';letutf8='小飼弾'letu8s=newUint8Array([100,97,110,107,111,103,97,105]);Base64.encode(latin);// ZGFua29nYWk=Base64.encode(latin,true);// ZGFua29nYWk skips paddingBase64.encodeURI(latin);// ZGFua29nYWkBase64.btoa(latin);// ZGFua29nYWk=Base64.btoa(utf8);// raises exceptionBase64.fromUint8Array(u8s);// ZGFua29nYWk=Base64.fromUint8Array(u8s,true);// ZGFua29nYW which is URI safeBase64.encode(utf8);// 5bCP6aO85by+Base64.encode(utf8,true)// 5bCP6aO85by-Base64.encodeURI(utf8);// 5bCP6aO85by-
Base64.decode('ZGFua29nYWk=');// dankogaiBase64.decode('ZGFua29nYWk');// dankogaiBase64.atob('ZGFua29nYWk=');// dankogaiBase64.atob('5bCP6aO85by+');// 'å°�飼弾' which is nonsenseBase64.toUint8Array('ZGFua29nYWk=');// u8s aboveBase64.decode('5bCP6aO85by+');// 小飼弾// note .decodeURI() is unnecessary since it accepts both flavorsBase64.decode('5bCP6aO85by-');// 小飼弾
Base64.isValid(0);// false: 0 is not stringBase64.isValid('');// true: a valid Base64-encoded empty byteBase64.isValid('ZA==');// true: a valid Base64-encoded 'd'Base64.isValid('Z A=');// true: whitespaces are okayBase64.isValid('ZA');// true: padding ='s can be omittedBase64.isValid('++');// true: can be non URL-safeBase64.isValid('--');// true: or URL-safeBase64.isValid('+-');// false: can't mix both
By defaultBase64
leaves built-in prototypes untouched. But you can extend them as below.
// you have to explicitly extend String.prototypeBase64.extendString();// once extended, you can do the following'dankogai'.toBase64();// ZGFua29nYWk='小飼弾'.toBase64();// 5bCP6aO85by+'小飼弾'.toBase64(true);// 5bCP6aO85by-'小飼弾'.toBase64URI();// 5bCP6aO85by- ab alias of .toBase64(true)'小飼弾'.toBase64URL();// 5bCP6aO85by- an alias of .toBase64URI()'ZGFua29nYWk='.fromBase64();// dankogai'5bCP6aO85by+'.fromBase64();// 小飼弾'5bCP6aO85by-'.fromBase64();// 小飼弾'5bCP6aO85by-'.toUint8Array();// u8s above
// you have to explicitly extend Uint8Array.prototypeBase64.extendUint8Array();// once extended, you can do the followingu8s.toBase64();// 'ZGFua29nYWk='u8s.toBase64URI();// 'ZGFua29nYWk'u8s.toBase64URL();// 'ZGFua29nYWk' an alias of .toBase64URI()
// extend all at onceBase64.extendBuiltins()
Suppose you have:
var pngBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
Which is a Base64-encoded 1x1 transparent PNG,DO NOT USEBase64.decode(pngBase64)
. UseBase64.atob(pngBase64)
instead. Base64.decode()
decodes to UTF-8 string whileBase64.atob()
decodes to bytes, which is compatible to browser built-inatob()
(Which is absent in node.js). The same rule applies to the opposite direction.
Or even better,Base64.toUint8Array(pngBase64)
.
- Since version 3.3 it is written in TypeScript. Now
base64.mjs
is compiled frombase64.ts
thenbase64.js
is generated frombase64.mjs
. - Since version 3.7
base64.js
is ES5-compatible again (hence IE11-compatible). - Since 3.0
js-base64
switch to ES2015 module so it is no longer compatible with legacy browsers like IE (see above)
About
Base64 implementation for JavaScript