使い方
- ファイルをドロップエリアにドラッグするか、クリックしてデバイスからファイルを選択します(100 MB まで)。
- 「出力形式」を選びます。API や設定ファイルには「Base64」、HTML や CSS には「Data URI」が適しています。
- 「76 文字で改行」は、メール本文など MIME 形式の行分割が必要な場合にのみオンにします。
- ファイル名、MIME タイプ、サイズを確認し、結果を「コピー」するか、.txt ファイルとして「ダウンロード」します。
ファイルを Base64 にエンコードする理由
システム間でデータをやり取りする形式の多くは、テキストしか扱えません。JSON、XML、YAML、HTML、メールヘッダーには任意のバイト列を入れられません。ファイルにはゼロバイトや文字として無効なバイト列、テキストパーサーが書き換えてしまう改行コードが含まれている可能性があるためです。Base64 はファイルを 3 バイトずつ、英字、数字、+、/ からなる 64 種類の文字のうちの 4 文字に置き換えます。そのため、どんなファイルでも普通の文字列として送ることができ、デコードすればまったく同じバイト列に戻せます。
その代わりにサイズが増えます。エンコードしたテキストは元のファイルより約 33% 大きくなり、改行を入れるとさらに少し増えます。3 MB のファイルは約 4 MB の Base64 になります。
主な用途
- JSON や XML の API。multipart 形式のアップロードに対応していないエンドポイントでは、ファイルを Base64 文字列として 1 つのフィールドに入れ、ファイル名や種類を別のフィールドで送るよう求められることがよくあります。
- メールの添付ファイル。MIME では、添付ファイルを 1 行 76 文字以内の Base64 でエンコードします(RFC 2045)。「76 文字で改行」をオンにすると、同じレイアウトで出力されます。
- 設定ファイルとシークレット。Kubernetes Secret の
data以下の値は Base64 のため、TLS 証明書、キーストア、ライセンスファイルはマニフェストに書き込む前にエンコードする必要があります。CI システムでも、バイナリのシークレットを同じ方法で環境変数に保存することがよくあります。 - データベースとソースコード。フォント、効果音、テスト用のフィクスチャなどの小さなバイナリは、別ファイルにせず、テキスト型のカラムや文字列定数に保存できます。
画像の場合は、画像を Base64 に変換を使うと、リサイズや HTML・CSS のコード生成もできます。Base64 をファイルに戻すには、Base64 をファイルに変換を使用してください。
Base64 文字列と data URI、どちらを使うべきですか?
Base64 文字列は、エンコードしたバイト列そのものです。API、Kubernetes、データベース、多くのプログラミングライブラリが求めるのはこの形式で、通常はファイル名やコンテンツタイプを指定する別のフィールドと組み合わせて使います。
data URI は、data:application/pdf;base64, のように MIME タイプを含むプレフィックスを先頭に付けたものです。これにより、ブラウザは文字列全体を URL として src、href、CSS の url() で使えます。プレーンな Base64 を求める API には、このプレフィックスを送らないでください。多くのデコーダーはプレフィックス付きの値を受け付けません。MIME タイプを自分で指定したい場合やパーセントエンコードを使いたい場合は、Data URI 生成ツールをお試しください。
JSON、YAML、ソースコードで使う場合は、「76 文字で改行」をオフのままにしてください。JSON の文字列には生の改行を含められず、YAML では折り返した値が崩れやすいためです。
コマンドラインでファイルをエンコードする
# Linux(GNU coreutils):-w 0 でデフォルトの 76 文字改行を無効にします
base64 -w 0 report.docx > report.txt
# macOS
base64 -i report.docx -o report.txt
# Windows PowerShell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\files\report.docx"))
# Kubernetes がファイルを自動でエンコードします
kubectl create secret generic app-cert --from-file=tls.crt
よくある質問
ファイルサイズに上限はありますか?
100 MB までのファイルをエンコードできます。出力は約 3 分の 1 大きくなるため、100 MB のファイルからは約 133 MB のテキストが生成されます。これほど大量のテキストを表示するとページが重くなることがあるので、大きなファイルでは出力欄からコピーせずに「ダウンロード」を使用してください。
ファイルはサーバーにアップロードされますか?
いいえ。ファイルはブラウザ内の JavaScript で読み込まれてエンコードされ、ネットワーク経由では何も送信されません。証明書、鍵、非公開の文書がお使いのデバイスの外に出ることはありません。
Base64 でファイルは圧縮または暗号化されますか?
どちらもされません。Base64 にするとデータは約 33% 大きくなり、誰でもデコードできます。ファイルを秘密にする必要がある場合はエンコードする前に暗号化し、サイズが気になる場合は ZIP や gzip などで先に圧縮してください。
出力に改行が含まれるのはなぜですか?
「76 文字で改行」がオンになっているためです。メールで使われる MIME 形式に合わせたものですが、ほとんどの API、JSON ドキュメント、Kubernetes マニフェストは改行のない 1 行の文字列を想定しているため、これらの用途ではオフにしてください。