在較新的瀏覽器中已經有提供 btoaatob 兩個全域函式,可以用來做 base64 的 encode 和 decode,瀏覽器支援參考這裡,基本上就是 IE9 以下不支援,使用方法如下:

1
2
btoa('Hello, world'); // "SGVsbG8sIHdvcmxk"
atob('SGVsbG8sIHdvcmxk'); // "Hello, world"

但是內建的函式不支援 UTF8 的編碼:

1
btoa('中文'); // DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

而另外在 Node.js 中則可使用內建的 buffer 模組,它也可以支援 UTF8:

1
2
3
4
5
var Buffer = require('buffer').Buffer;
new Buffer('Hello, world').toString('base64'); // "SGVsbG8sIHdvcmxk"
new Buffer('SGVsbG8sIHdvcmxk', 'base64').toString(); // "Hello, world"
new Buffer('中文').toString('base64'); // "5Lit5paH"
new Buffer('5Lit5paH', 'base64').toString(); // "中文"

若想要瀏覽器中支援 UTF8 可以考慮使用我寫的 hi-base64 套件:

1
2
3
4
base64.encode('Hello, world'); // "SGVsbG8sIHdvcmxk"
base64.decode('SGVsbG8sIHdvcmxk'); // "Hello, world"
base64.encode('中文'); // "5Lit5paH"
base64.decode('5Lit5paH'); // "中文"

支援各瀏覽器和 Node.js。