Base64文字列をデコードする方法
Base64エンコードされた文字列を元のテキストにデコードする方法を解説。コード例、エラーハンドリングのコツ、デコード時によくある落とし穴を紹介します。
Decoding
詳細な説明
Base64デコードはエンコードの逆の操作です。Base64エンコードされた文字列を受け取り、元のバイト列に変換します。その後、テキスト、画像、その他のデータ形式として解釈できます。
デコードの手順:
- Base64文字列を取得します。例:
"SGVsbG8=" - パディング文字(
=)を除去し、その数を記録します(末尾で破棄するバイト数がわかります)。 - 各Base64文字をBase64アルファベットを使って6ビット値に逆マッピング:
S=18,G=6,V=21,s=44,b=27,G=6,8=60 - すべての6ビット値を連続したビットストリームに連結します。
- ビットストリームを8ビットのバイト単位で分割します。
- 各バイトを文字に変換:
72=H,101=e,108=l,108=l,111=o
JavaScriptの場合:
const decoded = atob("SGVsbG8sIFdvcmxkIQ==");
// Result: "Hello, World!"
エラーハンドリングは非常に重要です。 Base64文字列にはBase64アルファベット(A-Z, a-z, 0-9, +, /、およびパディング用の =)の文字のみ含めることができます。無効な文字を含む文字列をデコーダーに渡すとエラーが発生します。デコード処理は必ずtry-catchブロックで囲みましょう:
try {
const result = atob(input);
} catch (e) {
console.error("Invalid Base64 input");
}
よくある落とし穴:
- デコード結果が生のバイト列であり、必ずしも有効なテキストではないことを忘れがちです。元のデータが画像やバイナリファイルの場合、文字列として解釈するとゴミデータになります。
- URL-safe Base64(
-と_)と標準Base64(+と/)の混同。atob()は標準Base64を想定しており、URL-safeバリアントでは文字を置換しない限り失敗します。 - 入力中の空白や改行が、厳密なパーサーではデコード失敗の原因になることがあります。ただし、多くの実装ではこれらを暗黙的に無視します。
ユースケース
APIレスポンスから受信したBase64エンコードされた設定ペイロードをデコードする場合。Kubernetes Secretsのように値がBase64文字列として格納されているケースが典型的です。