.btoa()

バイナリデータの"文字列"から、base-64にエンコードされたASCII文字列を作成します。

これは新しく生のUnicode文字列作成には適していないことに注意してください。 詳細は、「Unicode文字列について」のセクションを参照してください。

文法

var encodedData = window.btoa(stringToEncode);

// 文字列のエンコード
var encodedData = window.btoa("Hello, world");
// 文字列のデコード
var decodedData = window.atob(encodedData);

注意事項

このメソッドは通信の問題がなければ、そのデータの転送に使用することが可能で、 その後window.atob()を使用して、再び元のデータにデコードします。 例えば、ASCII値の0~31のような制御文字をエンコードすることが出来ます。

btoa()はまた、ウインドウがコンポーネントのグローバルオブジェクトで無くても、 JavaScriptに実装されているXPCOMコンポーネントを利用することが出来ます。

Unicode文字列について

ほとんどのブラウザでは、Unicode文字列のwindow.btoa()の呼び出しは、 文字範囲外(Character Out Of Range)の例外を引き起こします。

この問題を避けるために、 Johan Sundström氏による、 下記のパターンの使用を検討してください。

function utf8_to_b64( str ) {
    return window.btoa(encodeURIComponent( escape( str )));
}

function b64_to_utf8( str ) {
    return unescape(decodeURIComponent(window.atob( str )));
}

// Usage:
utf8_to_b64('✓ à la mode'); // JTI1dTI3MTMlMjUyMCUyNUUwJTI1MjBsYSUyNTIwbW9kZQ==
b64_to_utf8('JTI1dTI3MTMlMjUyMCUyNUUwJTI1MjBsYSUyNTIwbW9kZQ=='); // "✓ à la mode"

utf8_to_b64('I \u2661 Unicode!'); // SSUyNTIwJTI1dTI2NjElMjUyMFVuaWNvZGUlMjUyMQ==
b64_to_utf8('SSUyNTIwJTI1dTI2NjElMjUyMFVuaWNvZGUlMjUyMQ=='); // "I ♡ Unicode!"

より確実で手軽な解決法は、型指定された配列を通して、 DOMStringをUTF-8にエンコードされた文字列に変換することです。 これを行うには、このリンク先の段落を参照してください。

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本 1.0 (1.7 or earlier)[1] 10
モバイル
機能 Android Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 1.0 (1) × ?

[1] btoa()はまた、ウインドウがコンポーネントのグローバルオブジェクトで無くても、 JavaScriptに実装されているXPCOMコンポーネントを利用することが出来ます。

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。