|
|
|
|
[![build status](https://secure.travis-ci.org/dankogai/js-base64.png)](http://travis-ci.org/dankogai/js-base64)
|
|
|
|
|
|
|
|
|
|
# base64.js
|
|
|
|
|
|
|
|
|
|
Yet another Base64 transcoder
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
### Install
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
$ npm install --save js-base64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If you are using it on ES6 transpilers, you may also need:
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
$ npm install --save babel-preset-env
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Note `js-base64` itself is stand-alone so its `package.json` has no `dependencies`. However, it is also tested on ES6 environment so `"babel-preset-env": "^1.7.0"` is on `devDependencies`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### In Browser
|
|
|
|
|
|
|
|
|
|
* Locally
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<script src="base64.js"></script>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* Directly from CDN. In which case you don't even need to install.
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<!-- the latest -->
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/js-base64/base64.min.js">
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<!-- with version fixed -->
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/js-base64@2.6.4/base64.min.js">
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### node.js
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
var Base64 = require('js-base64').Base64;
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## es6+
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
import { Base64 } from 'js-base64';
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## SYNOPSIS
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
Base64.encode('dankogai'); // ZGFua29nYWk=
|
|
|
|
|
Base64.btoa( 'dankogai'); // ZGFua29nYWk=
|
|
|
|
|
Base64.fromUint8Array( // ZGFua29nYWk=
|
|
|
|
|
new Uint8Array([100,97,110,107,111,103,97,105])
|
|
|
|
|
);
|
|
|
|
|
Base64.fromUint8Array( // ZGFua29nYW which is URI safe
|
|
|
|
|
new Uint8Array([100,97,110,107,111,103,97,105]), true
|
|
|
|
|
);
|
|
|
|
|
Base64.encode( '小飼弾'); // 5bCP6aO85by+
|
|
|
|
|
Base64.encodeURI('小飼弾'); // 5bCP6aO85by- which equals to Base64.encode('小飼弾', true)
|
|
|
|
|
Base64.btoa( '小飼弾'); // raises exception
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
Base64.decode('ZGFua29nYWk='); // dankogai
|
|
|
|
|
Base64.atob( 'ZGFua29nYWk='); // dankogai
|
|
|
|
|
Base64.toUint8Array( // new Uint8Array([100,97,110,107,111,103,97,105])
|
|
|
|
|
'ZGFua29nYWk='
|
|
|
|
|
);
|
|
|
|
|
Base64.decode('5bCP6aO85by+'); // 小飼弾
|
|
|
|
|
// note .decodeURI() is unnecessary since it accepts both flavors
|
|
|
|
|
Base64.decode('5bCP6aO85by-'); // 小飼弾
|
|
|
|
|
Base64.atob( '5bCP6aO85by+'); // 'å°é£¼å¼¾' which is nonsense
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### String Extension for ES5
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
if (Base64.extendString) {
|
|
|
|
|
// you have to explicitly extend String.prototype
|
|
|
|
|
Base64.extendString();
|
|
|
|
|
// once extended, you can do the following
|
|
|
|
|
'dankogai'.toBase64(); // ZGFua29nYWk=
|
|
|
|
|
'小飼弾'.toBase64(); // 5bCP6aO85by+
|
|
|
|
|
'小飼弾'.toBase64(true); // 5bCP6aO85by-
|
|
|
|
|
'小飼弾'.toBase64URI(); // 5bCP6aO85by-
|
|
|
|
|
'ZGFua29nYWk='.fromBase64(); // dankogai
|
|
|
|
|
'5bCP6aO85by+'.fromBase64(); // 小飼弾
|
|
|
|
|
'5bCP6aO85by-'.fromBase64(); // 小飼弾
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### TypeScript
|
|
|
|
|
|
|
|
|
|
TypeScript 2.0 type definition was added to the [DefinitelyTyped repository](https://github.com/DefinitelyTyped/DefinitelyTyped).
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
$ npm install --save @types/js-base64
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## `.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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## SEE ALSO
|
|
|
|
|
|
|
|
|
|
+ http://en.wikipedia.org/wiki/Base64
|