Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Base64 implementation for JavaScript

License

NotificationsYou must be signed in to change notification settings

dankogai/js-base64

Repository files navigation

CI via GitHub Actions

base64.js

Yet anotherBase64 transcoder.

Install

$ npm install --save js-base64

Usage

In Browser

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.

As an ES6 Module

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>

node.js (commonjs)

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

SYNOPSIS

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

Built-in Extensions

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()

.decode() vs.atob (and.encode() vsbtoa())

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).

Brief History

  • Since version 3.3 it is written in TypeScript. Nowbase64.mjs is compiled frombase64.ts thenbase64.js is generated frombase64.mjs.
  • Since version 3.7base64.js is ES5-compatible again (hence IE11-compatible).
  • Since 3.0js-base64 switch to ES2015 module so it is no longer compatible with legacy browsers like IE (see above)

[8]ページ先頭

©2009-2025 Movatter.jp