ファイルを選択
  1. base64hub
  2. テキストツール
  3. Base64 エンコーダー

Base64 エンコーダー:テキストを Base64 にエンコード

テキストを入力または貼り付けると、その場で Base64 が表示されます。デフォルトは UTF-8 なので、アクセント記号、キリル文字、日本語、絵文字も正しくエンコードされます。URLセーフ、パディング、折り返しのオプションもあります。

無料 登録不要・制限なし ローカル アップロードなし 27 種類の文字コード、デフォルトは UTF-8 更新日 2026/10/27
入力 0 B出力 0 Bサイズ –

ブラウザ内で処理されます。このページがデータをどこかに送信することはできません – その根拠

テキストを Base64 にエンコードする方法

  1. 入力 · テキスト 欄にテキストを入力するか貼り付けます。ページを開いた時点ではサンプルが入っているので、空から始めるなら クリア を押してください。
  2. 入力に合わせて 出力 · Base64 に Base64 が表示されます。非常に大きな入力では リアルタイム のチェックを外し、代わりに 実行 を押すこともできます。
  3. 受け取る側のシステムに合わせてオプションを設定します。URLセーフ(- _)、パディングなし(=)、折り返し、文字コード です。デフォルト(標準アルファベット、パディングあり、1 行、UTF-8)でたいていの API に対応できます。
  4. 出力をコピー を押すか、ダウンロード で結果を base64.txt として保存します。
  5. 往復で元に戻るか確かめるには 入れ替え を押します。Base64 が入力欄に移り、ツールがデコードに切り替わります。

ボタンの下には入力のバイト数、出力のサイズ、増加率が表示されます。フィールドに長さの上限があるときに便利です。

Base64 エンコードの仕組み

Base64 はバイトを扱うので、最初のステップは、文字コード(別のものを選ばない限りここでは UTF-8)でテキストをバイト列に変換することです。エンコーダーはバイトを 3 つずつ(24 ビット)取り出し、6 ビットの数 4 つに分け、それぞれを 64 文字のアルファベット(A–Z、a–z、0–9、+、/)の 1 文字として書き出します。

定番の例はテキスト Man で、バイト 4D 61 6E が TWFu になります。最後のグループが 1 バイトか 2 バイトしかないときは、出力を = で埋めます。Ma は TWE=、M は TQ== です。詳しい手順は Base64 の仕組み に、= を省略できる場合については パディングの解説 にまとめています。

n バイトの出力は常に 4 × ⌈n / 3⌉ 文字で、入力より約 33% 長くなります。任意のサイズでこの計算をするなら Base64 サイズ計算ツール を、それが問題になる場面については Base64 のサイズ増加 をご覧ください。Base64 は誰でも元に戻せるので、何も隠せません。秘密の情報を入れる前に エンコードと暗号化の違い を読んでおいてください。

エンコードのオプション

オプション何が変わるか使う場面
URLセーフ(- _)+ が - に、/ が _ になる(RFC 4648 セクション 5)URL、クエリ文字列、ファイル名、Cookie、JWT。Base64URL エンコーダー ではデフォルトでオン
パディングなし(=)末尾の = を取り除くJWT や大半の URLセーフな形式、どのみち = を削るもの
折り返し:76(MIME、LF または CRLF)76 文字ごとに改行を入れるメール本文と添付ファイル(MIME エンコーダー)
折り返し:64(PEM)64 文字ごとに改行を入れる-----BEGIN と -----END の行に挟まれた証明書や鍵
文字コードエンコード前に各文字をどのバイトにするか受信側が UTF-16、Windows-1251、Shift_JIS などのレガシーな文字コードを想定していない限り UTF-8

Unicode、絵文字、URLセーフ出力の例

以下の値はすべて Python の base64 モジュールで生成したもので、このツールの出力と一致します。

入力設定Base64
HelloUTF-8SGVsbG8=
Hello, world!UTF-8SGVsbG8sIHdvcmxkIQ==
caféUTF-8Y2Fmw6k=
caféISO-8859-1Y2Fm6Q==
€UTF-84oKs
€Windows-1252gA==
👋UTF-88J+Riw==
👋UTF-8、URLセーフ、パディングなし8J-Riw
ПриветUTF-80J/RgNC40LLQtdGC
ПриветWindows-1251z/Do4uXy

同じ単語でも文字コードが違えばバイト列が違うので、Base64 も変わります。é は UTF-8 では 2 バイト(C3 A9)、Latin-1 では 1 バイト(E9)です。手を振る絵文字は UTF-8 で 4 バイトなので、単独では 8 文字になり、そのうち 2 文字がパディングです。

文字コードと、収まらない文字

UTF-8 はすべての Unicode 文字を表現できるので、何も失われません。リストにある残り 26 種類の文字コード(UTF-16LE/BE、UTF-32LE、ASCII、ISO-8859 と Windows のコードページ、KOI8-R/U、CP866、Shift_JIS、EUC-JP、GBK、Big5、EUC-KR)は、それを前提とするシステムのためにあります。選んだ文字コードにない文字がテキストに含まれていると、その文字は ? に置き換えられ、何文字置き換えたかが警告で表示されます。たとえば ISO-8859-1 で € をエンコードすると Pw== になり、これはただの疑問符です。

Windows や .NET の文字列、PowerShell には UTF-16LE を選んでください。理由は UTF-16 を Base64 に変換 のページで説明しています。7 ビットのテキスト以外を拒否しなければならないシステムには ASCII を選びます(ASCII を Base64 に変換)。

折り返し

素の Base64 は 1 本の長い行で、JSON、HTTP ヘッダー、URL、環境変数ではこの形が必要です。メールは 76 文字の行(RFC 2045)、PEM ファイルは 64 文字の行を使います。折り返しオプションは、その幅ごとに \n の改行を入れます。76 (MIME, CRLF) を選ぶと改行は CRLF になります。このサイトのデコーダー を含め、デコーダーは改行を読み飛ばすので、折り返した出力も同じバイト列にデコードされます。MIME のルールは メールの Base64 で解説しています。

よくあるエンコードの失敗

  • 末尾の改行が紛れ込む。 echo Hello | base64 は SGVsbG8K を出力します。echo が \n を付けるからです。テキスト Hello だけなら SGVsbG8= です。printf '%s' を使い、ここに貼り付けるときは入力のバイト数が想定どおりか確認してください。
  • btoa() が Unicode で例外を投げる。 ブラウザで btoa("Grüße 👋") を実行すると InvalidCharacterError になります。btoa は Latin-1 の文字しか受け付けないからです。下のスニペットのように、先に UTF-8 のバイト列にエンコードしてください。
  • 受信側が別の文字コードを使っている。 UTF-8 でエンコードしたものを相手が Latin-1 としてデコードすると、café は café になります。文字コードを取り決めるか、ここで受信側の文字コードを選んでください。
  • 二重にエンコードしている。 SGVsbG8= を Base64 にすると U0dWc2JHOD0= です。デコードした値がまた Base64 なら、パイプラインのどこかで 2 回エンコードされています。
  • + と / で URL が壊れる。 クエリ文字列では + が空白として読まれます。URLセーフのオプションか Base64URL エンコーダー を使うか、値をパーセントエンコードしてください。

JavaScript、Python、コマンドラインでの Base64 エンコード

ブラウザの JavaScript では、TextEncoder で文字列を UTF-8 のバイト列に変換してから、そのバイト列をエンコードします。新しいブラウザなら bytes.toBase64() を直接呼べます(Uint8Array.toBase64)。

const bytes = new TextEncoder().encode("Grüße 👋");
let bin = "";
for (const b of bytes) bin += String.fromCharCode(b);
btoa(bin);                                   // "R3LDvMOfZSDwn5GL"

// Node.js
Buffer.from("Grüße 👋", "utf8").toString("base64");     // "R3LDvMOfZSDwn5GL"
Buffer.from("👋", "utf8").toString("base64url");         // "8J-Riw"

Python の b64encode はバイト列を受け取り、バイト列を返します。

import base64

base64.b64encode("Grüße 👋".encode("utf-8")).decode("ascii")
# 'R3LDvMOfZSDwn5GL'
base64.urlsafe_b64encode("👋".encode()).rstrip(b"=").decode()
# '8J-Riw'

Linux と macOS では、base64 コマンドが標準入力をエンコードします。

printf '%s' 'Grüße 👋' | base64
base64 -w 0 file.bin > file.b64

最初のコマンドは R3LDvMOfZSDwn5GL を出力します。Linux の GNU base64 はデフォルトで 76 桁で折り返し、-w 0 でそれを無効にできます。macOS 版は指定しない限り折り返しません。ほかの言語や注意点は JavaScript の Base64、Node.js、Python、PHP をご覧ください。

テキストではなくファイルをエンコードしますか?

画像、PDF、その他あらゆるファイルはファイルエンコーダーで変換できます。Data URI や JSON での出力にも対応しています。

ファイルを Base64 に変換

よくある質問

文字列を Base64 エンコードするには?

上の入力欄に文字列を貼り付け、出力欄から結果をコピーします。コードでは、文字列を UTF-8 のバイト列に変換してからそのバイト列をエンコードします。Python なら base64.b64encode(s.encode())、Node.js なら Buffer.from(s).toString("base64") です。

Base64 の末尾に = や == が付くのはなぜですか?

Base64 は 3 バイト単位で処理します。入力の長さが 3 の倍数でないと最後のブロックが足りなくなり、不足分を = で示します。余りが 2 バイトなら = が 1 つ、1 バイトなら == です。詳しくは パディングの解説 をご覧ください。

同じテキストなのに、他のツールと Base64 の結果が違うのはなぜですか?

たいていはバイト列に見えない違いがあります。末尾の改行(echo は改行を付けます)、文字コードの違い(UTF-8、Latin-1、UTF-16)、Unicode の正規化などです。ツールの下に表示される入力のバイト数を比べてみてください。

Base64 エンコードでパスワードを隠せますか?

隠せません。Base64 には鍵がなく、誰でも一瞬でデコードできます。Base64 はデータを運ぶためのもので、保護には本物の暗号化やハッシュを使ってください。エンコードと暗号化の違い も参考になります。

Base64 エンコードするとテキストはどれくらい大きくなりますか?

3 バイトが 4 文字になるので、出力は約 33% 大きくなります。折り返す場合はさらに改行の分が加わります。UTF-8 で 100 バイトのテキストは 136 文字になります。