- 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
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.