ユニコード文字のbase64エンコード/デコード
単純に、window.btoa("あいうえお")
とすると、InvalidCharacterError: String contains an invalid character
と例外が発生する。
Encoding StandardのTextEncoder、TextDecoderが使えるなら、以下のように書ける。
function encodeToBase64 (str){ return window.btoa(String.fromCharCode.apply(null, TextEncoder("utf-8").encode(str))); } function decodeFromBase64 (data) { return TextDecoder("utf-8").decode(Uint8Array([c.charCodeAt(0) for (c of window.atob(data))])) }
TextEncoder, TextDecoderが使えない場合、は以下
function encodeToBase64 (str) { var data = encodeURI(str).replace(/%([0-9A-F]{2})/g, function(a,n){ return String.fromCharCode(parseInt(n, 16)); }); return window.btoa(data); } function decodeFromBase64 (data) { var utf8 = window.atob(data).split(""); return decodeURI(utf8.map(function(c){ return "%" + c.charCodeAt(0).toString(16); }).join("")); }