JavaScriptでBase64を使用して文字列をエンコードおよびデコードする方法
紹介
JavaScriptでは、Base64を使用して文字列をエンコードおよびデコードすることが可能です。
この記事では、最新のウェブブラウザで利用可能な btoa および atob のJavaScript関数について紹介します。
DigitalOcean App Platformを使用して、GitHubからフロントエンドアプリケーションをデプロイします。アプリのスケーリングにDigitalOceanが集中できるようにしましょう。
前提条件
この記事を読み進めるには、次のものが必要です:
- JavaScriptにおける文字列の理解。詳細を知りたい場合は、「JavaScriptでの文字列の扱い方」を参照してください。
WindowまたはWorkerGlobalScopeで利用可能な関数の使用に関する理解。- 開発者コンソールの理解。詳細については「JavaScript開発者コンソールの使い方」を参照してください。
Base64による文字列のエンコードとデコード
btoa() と atob() は、HTML仕様の重要な部分であり、すべての現代のブラウザで利用可能な2つのBase64補助関数です。
注意: これらの関数の名前は、バイナリをASCIIに変換する古いUnixコマンド(btoa)と、ASCIIをバイナリに変換するコマンド(atob)に由来しています。しかし、これらの関数の入力と出力は両方ともUnicode文字列です。
btoa() は文字列を受け取り、それをBase64にエンコードします。
例えば、あなたが文字列「Hello World!」を持っていて、これをBase64にエンコードしたいとします。ブラウザのウェブ開発者コンソールで、文字列を定義し、エンコードしてエンコードされた文字列を表示します:
// Define the string
var decodedStringBtoA = 'Hello World!';
// Encode the String
var encodedStringBtoA = btoa(decodedStringBtoA);
console.log(encodedStringBtoA);
このコードの出力は、文字と数字の文字列です:
SGVsbG8gV29ybGQh
atob() は文字列を受け取り、Base64 からデコードします。
以前のエンコードされた文字列、'SGVsbG8gV29ybGQh'を取り上げ、Base64からデコードしましょう。ブラウザのウェブ開発者コンソールで、文字列を定義し、デコードして、デコードされた文字列を表示します:
// Define the string
var encodedStringAtoB = 'SGVsbG8gV29ybGQh';
// Decode the String
var decodedStringAtoB = atob(encodedStringAtoB);
console.log(decodedStringAtoB);
このコードの出力は、文字列が元のメッセージに戻されたことを示しています:
Hello World!
さて、Base64をエンコードおよびデコードするための2つのツールがあります。
Base64の一般的な使用例の探求
Base64を使用して、HTML、JavaScript、CSSに互換性のある方法でバイナリデータを表現することもできます。たとえば、Base64を使用してCSSやJavaScriptファイルにインラインで画像を埋め込むことができます。
Base64を使用して、フォームデータやJSONなどの入力を、URLセーフな文字セットに変換することが可能です。ただし、特定のサーバーがプラス(+)やスラッシュ(/)の文字をどのように解釈するかによって、代わりにencodeURIComponentを使用することをお勧めします。
Base64の制限を理解する
Base64は決して安全な暗号化方式として意図されていません。
Base64は圧縮方法ではありません。文字列をBase64にエンコードすると、通常は33%長くなります。
注意: btoa() と atob() 関数は、ASCII 文字を含む文字列にのみ作用することに注意することが重要です。非ASCII 文字を含む文字列をエンコードまたはデコードする必要がある場合は、代わりに TextEncoder と TextDecoder クラスを使用するべきです。
結論
この記事では、Base64文字列をエンコードおよびデコードするためのbtoaとatobの使い方を紹介しました。
注意: Can I Use ドキュメントは、UTF-8の処理に関する既知の問題を示し、古いブラウザ用のポリフィルを提供します。
JavaScriptについてさらに学びたい場合は、演習やプログラミングプロジェクトのためのJavaScriptトピックページをご覧ください。
