在較新的瀏覽器中已經有提供btoa和atob兩個全域函式,可以用來做base64的encode和decode,

瀏覽器支援參考這裡,基本上就是IE9以下不支援,使用方法如下:

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

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

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

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

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套件:

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

支援各瀏覽器和Node.js。

相關文章