ファイル Base64 変換ツール

文書、アーカイブ、フォント、証明書、プログラムなど、どんなファイルでもドロップするだけで、Base64 文字列または data URI としてエンコード結果を取得できます。処理はすべてブラウザ内でローカルに行われます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. ファイルをドロップエリアにドラッグするか、クリックしてデバイスからファイルを選択します(100 MB まで)。
  2. 「出力形式」を選びます。API や設定ファイルには「Base64」、HTML や CSS には「Data URI」が適しています。
  3. 「76 文字で改行」は、メール本文など MIME 形式の行分割が必要な場合にのみオンにします。
  4. ファイル名、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 行の文字列を想定しているため、これらの用途ではオフにしてください。

Base64 エンコーダーとの違いは何ですか?
Base64 エンコーダーはテキスト向けで、文字コードや Base64 の種類を選べます。このページはファイル向けで、あらゆるファイルの生のバイト列を読み込み、MIME タイプを表示し、data URI を直接出力できます。