
base64.js
Yet another Base64 transcoder.
Install
$ npm install --save js-base64
Usage
In Browser
Locally…
<script src="base64.js"></script>
… or Directly from CDN. In which case you don't even need to install.
<script src="https://cdn.jsdelivr.net/npm/js-base64@3.7.8/base64.min.js"></script>
This good old way loads Base64 in the global context (window). Though Base64.noConflict() is made available, you should consider using ES6 Module to avoid tainting window.
As an ES6 Module
locally…
import { Base64 } from 'js-base64';
import { encode, decode } from 'js-base64';
or even remotely.
<script type="module">
import { Base64 } from 'https://cdn.jsdelivr.net/npm/js-base64@3.7.8/base64.mjs';
</script>
<script type="module">
import { encode, decode } from 'https://cdn.jsdelivr.net/npm/js-base64@3.7.8/base64.mjs';
</script>
node.js (commonjs)
const {Base64} = require('js-base64');
Unlike the case above, the global context is no longer modified.
You can also use esm to import instead of require.
require=require('esm')(module);
import {Base64} from 'js-base64';
SYNOPSIS
let latin = 'dankogai';
let utf8 = '小飼弾'
let u8s = new Uint8Array([100,97,110,107,111,103,97,105]);
Base64.encode(latin);
Base64.encode(latin, true);
Base64.encodeURI(latin);
Base64.btoa(latin);
Base64.btoa(utf8);
Base64.fromUint8Array(u8s);
Base64.fromUint8Array(u8s, true);
Base64.encode(utf8);
Base64.encode(utf8, true)
Base64.encodeURI(utf8);
Base64.decode( 'ZGFua29nYWk=');
Base64.decode( 'ZGFua29nYWk');
Base64.atob( 'ZGFua29nYWk=');
Base64.atob( '5bCP6aO85by+');
Base64.toUint8Array('ZGFua29nYWk=');
Base64.decode( '5bCP6aO85by+');
Base64.decode( '5bCP6aO85by-');
Base64.isValid(0);
Base64.isValid('');
Base64.isValid('ZA==');
Base64.isValid('Z A=');
Base64.isValid('ZA');
Base64.isValid('++');
Base64.isValid('--');
Base64.isValid('+-');
Built-in Extensions
By default Base64 leaves built-in prototypes untouched. But you can extend them as below.
Base64.extendString();
'dankogai'.toBase64();
'小飼弾'.toBase64();
'小飼弾'.toBase64(true);
'小飼弾'.toBase64URI();
'小飼弾'.toBase64URL();
'ZGFua29nYWk='.fromBase64();
'5bCP6aO85by+'.fromBase64();
'5bCP6aO85by-'.fromBase64();
'5bCP6aO85by-'.toUint8Array();
Base64.extendUint8Array();
u8s.toBase64();
u8s.toBase64URI();
u8s.toBase64URL();
Base64.extendBuiltins()
.decode() vs .atob (and .encode() vs btoa())
Suppose you have:
var pngBase64 =
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
Which is a Base64-encoded 1x1 transparent PNG, DO NOT USE Base64.decode(pngBase64). Use Base64.atob(pngBase64) instead. Base64.decode() decodes to UTF-8 string while Base64.atob() decodes to bytes, which is compatible to browser built-in atob() (Which is absent in node.js). The same rule applies to the opposite direction.
Or even better, Base64.toUint8Array(pngBase64).
Brief History
- Since version 3.3 it is written in TypeScript. Now
base64.mjs is compiled from base64.ts then base64.js is generated from base64.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)