JVBERi0 で始まる Base64 は何のファイル?
JVBERi0 = PDF PDF です。すべての PDF はバイト列 `%PDF-` で始まり、これを Base64 にすると `JVBERi0` になります。同様に `iVBORw0KGgo` は PNG、`/9j/` は JPEG、`UEsDB` は ZIP(DOCX や XLSX も ZIP 形式)です。
Base64 を PDF に変換するオンラインツール。生の Base64、data URI、JSON の値や API レスポンス全体もそのまま貼り付けるだけ。先頭バイトから本当のファイル形式を判定してプレビュー・ダウンロードし、途中で切れた PDF など開けない原因も表示します。PDF → Base64 にも対応、アップロードは一切なし。
前処理:
PDF などのファイルをここにドロップ、またはクリックして選択
あらゆる形式 · 最大 50 MB · アップロードなし
ファイル形式ごとに決まった「マジック」バイトで始まるため、その Base64 も決まった文字で始まります。下の表のプレフィックスは、このツールと同じエンジンが実際のファイルヘッダーから算出したものです。
| Base64 の先頭 | ファイル形式 | マジックバイト(16 進数) |
|---|---|---|
JVBERi0 | 25 50 44 46 2D | |
iVBORw0KGgoAAAANSUhEU | PNG | 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 |
/9j/ | JPEG | FF D8 FF |
R0lGOD | GIF | 47 49 46 38 |
UEsDB | ZIP / DOCX / XLSX / PPTX | 50 4B 03 04 |
0M8R4KGxGu | Office 97–2003 (DOC/XLS/PPT) | D0 CF 11 E0 A1 B1 1A E1 |
H4sI | Gzip | 1F 8B 08 |
UklGR | RIFF (WebP / WAV / AVI) | 52 49 46 46 |
SUQz | MP3 (ID3) | 49 44 33 |
e1xydG | RTF | 7B 5C 72 74 66 |
Go Tools のエンコード系ツールを開発しているエンジニアが執筆・レビューしています。このページに載っている長さ、プレフィックス、例はすべてページ自身のエンジンで算出し、自動テストで検証しています。
JVBERi0 = PDF PDF です。すべての PDF はバイト列 `%PDF-` で始まり、これを Base64 にすると `JVBERi0` になります。同様に `iVBORw0KGgo` は PNG、`/9j/` は JPEG、`UEsDB` は ZIP(DOCX や XLSX も ZIP 形式)です。
+33.3% 3 バイトごとに 4 文字になるため、約 33.3% 増えます。1 MB(1,048,576 バイト)の PDF は 1,398,104 文字です。メール添付のように 76 文字ごとに改行を入れると 1,434,896 文字、約 36.8% 増になります。
Base64 は、任意のバイト列を 64 種類の安全なテキスト文字(A–Z、a–z、0–9、+、/)とパディングの = だけで表す方式で、3 バイトが 4 文字になります。これにより、PDF のようなバイナリファイルを JSON のフィールド、XML の要素、メール本文、データベースのテキスト列など、テキストしか通さない経路に載せられます。Base64 から PDF への変換はその逆で、文字をバイトに戻して .pdf 拡張子で保存するだけです。問題は、実際に手元に届く Base64 がきれいな形であることはまれだという点です。data: プレフィックス、JSON エスケープ、改行、別のアルファベットが混じっていることが多く、多くの変換ツールは黙って開けないファイルを作ってしまいます。
%PDF-1.4 → bytes 25 50 44 46 2D 31 2E 34 JVBERi0xLjQ= → the same bytes in Base64 data:application/pdf;base64,JVBERi0xLjQ= → data URI form
data URI、\/ や \n の JSON エスケープ、引用符、MIME の改行、URL セーフの - _、URL からコピーした %2B %2F、PEM ヘッダー、欠けた = パディングを自動で処理し、行った手順を一つずつ表示します。
{"code":0,"data":{"file":"JVBERi0…"}} をそのまま貼り付けてください。最も Base64 らしい一番長いフィールドを使い、そのパス(data.file)を表示するので、どのフィールドをデコードしたかがわかります。
PDF、PNG、JPEG、GIF、WebP、DOCX、XLSX、PPTX、ZIP、GZIP、MP3、MP4 など 50 種類以上を先頭バイトから識別します。プレフィックスの記載が違っていても、ダウンロード時は正しい拡張子が付きます。
%%EOF のない PDF(コピー漏れや列の長さ制限で途中切れ)、二重にエンコードされた Base64、Base64 として貼られた 16 進数、gzip 圧縮されたデータ、暗号化された PDF をそれぞれ個別に警告します。
PDF はブラウザ内蔵のビューアで開き、画像と SVG は画像として、テキストと JSON はテキストとして表示します。HTML はこのページ上で実行されてしまうため、描画せずソースだけを表示します。
最大 50 MB のファイルをドロップすると、プレーンな Base64 または data URI を出力します。URL セーフや 76 文字改行も選べ、サイズの増加率も正確に表示します。
base64.b64decode open('out.pdf', 'wb').write(base64.b64decode(s))。- と _ を含む場合は urlsafe_b64decode を使います。b64decode は validate=True を渡さない限り改行を無視します。
java.util.Base64 Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s))。getDecoder() は改行を拒否し、getUrlDecoder() は - と _ 用です。
Buffer fs.writeFileSync('out.pdf', Buffer.from(s, 'base64'))。Buffer は両方のアルファベットを受け付けて空白も無視しますが、それ以外の不正な文字もエラーにせず黙って読み飛ばすので、結果が %PDF- で始まるか確認してください。
atob / Uint8Array.fromBase64 Blob を作る前に Uint8Array を組み立てます。Uint8Array.fromBase64() は新しい組み込みメソッドなので、対象ブラウザの対応状況を確認してください。
base64_decode file_put_contents('out.pdf', base64_decode($s, true))。true を渡して厳格モードにしないと、不正な文字が黙って捨てられます。
Convert.FromBase64String File.WriteAllBytes("out.pdf", Convert.FromBase64String(s))。空白は許容されますが、- と _ は受け付けません。
base64 -d / certutil macOS と Linux:base64 -d < in.txt > out.pdf。Windows:certutil -decode in.txt out.pdf。
JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · バージョン 1.4 · file.pdf として保存
JVBERi0、つまり %PDF- で始まっています。整える必要がないので、そのままデコードします。
"data:application\/pdf;base64,JVBERi0xLjQK…"
前処理:前後の引用符を削除 → JSON エスケープを復元 → data URI プレフィックスを削除(application/pdf)
PHP の json_encode や一部の Java シリアライザは / を \/ と書き出します。これを復元しないデコーダーに貼り付けると、バックスラッシュが不正な文字になります。
{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}} 前処理:JSON からフィールド data.file を取り出し
文字列を手で切り出す必要はありません。最も Base64 らしい一番長いフィールドを使い、そのパスを表示します。
data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
注意:data URI は application/pdf ですが、中身は PNG です。file.png として保存しました
多くの変換ツールは、どのビューアでも開けない .pdf を書き出してしまいます。ここではラベルよりマジックバイトを優先します。
255044462d312e370a…
注意:これは 16 進数のようです。16 進数として読むと PDF です。[16 進数としてデコード]
16 進数の文字はすべて Base64 として有効な文字なので、Base64 デコードは失敗せず、黙って意味のないデータを生成します。25 50 44 46 は %PDF です。
生の Base64、data:application/pdf;base64,…、\/ エスケープ付きで JSON からコピーした文字列、API レスポンス全体のどれでも構いません。非常に長い文字列は貼り付けより「.txt ファイルを開く」のほうが確実です。
入力欄の下に、プレフィックスの削除、エスケープの復元、パディングの補完、JSON から取り出したフィールドなど、行った前処理がすべて並びます。入力に問題があれば、エラーが該当する文字と位置を示します。
バッジにはファイルのマジックバイトから読み取った形式が表示されます。実は PDF ではない場合、data URI の宣言と中身が食い違う場合、PDF が %%EOF の手前で切れている場合は黄色の注意が出ます。
PDF はブラウザ内蔵のビューアで開き、画像やテキストはその場に表示されます。必要ならファイル名を変えて「ダウンロード」をクリック。逆方向は「PDF / ファイル → Base64」に切り替えてファイルをドロップします。
data:application/pdf;base64, は Base64 の一部ではありません。残したままだとエラーになる(: と ; は不正な文字)か、寛容なデコーダーでは先頭のバイトが壊れ、ファイルが %PDF- で始まらなくなります。
base64.b64decode(value) # value = 'data:application/pdf;base64,JVBERi0…'
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64) PDF はバイナリです。デコード結果を文字列に変換してテキストエンコーディングで書き出すと、不正なバイトが置き換えられ改行コードも変わるため、相互参照テーブルが壊れます。
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString()) fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64')) Java の Base64.getDecoder() は改行を受け付けません。一方、メールや Linux の base64 コマンドが出力する Base64 は 76 文字ごとに改行されています。MIME デコーダーを使うか、先に空白を取り除いてください。
byte[] pdf = Base64.getDecoder().decode(wrapped); // IllegalArgumentException
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);
JWT や多くの URL パラメータは + と / の代わりに - と _ を使い、= パディングを省略します。標準デコーダーはこれを拒否するか、誤ったバイトにデコードします。
base64.b64decode(token_part) # contains - and _
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))
ブラウザの atob は 1 バイトを 1 文字とする「バイナリ文字列」を返します。これをそのまま new Blob([str]) に渡すと UTF-8 でエンコードされ、127 を超えるバイトはすべて 2 バイトになります。先に Uint8Array へコピーしてください。
new Blob([atob(b64)], { type: 'application/pdf' }) const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' }) PDF は %%EOF で終わります。Base64 が VARCHAR 列、ログの行長制限、コピー漏れで切れていても、デコード自体はできますが、ビューアはエラーを出すかページが欠けます。送信側が出力した長さと比べてください。
SELECT LENGTH(pdf_b64) FROM docs; -- 65535: suspiciously round
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT; -- or store the bytes in a BLOB
{"filename": …, "content": "<base64>"} の形式を求めます。ここでファイルをエンコードして、Postman や cURL 用のテストリクエストを組み立てられます。%%EOF がないと表示されたら、列やログの行が短すぎて切れていたということです。+ /(標準、4 章)と - _(URL・ファイル名セーフ、5 章)です。URL セーフな Base64 は通常 = パディングを省略します。1 つの文字列に両方が混ざっている場合、編集されたか連結されたものです。= パディングは長さを 4 の倍数にそろえるためのものです。パディングがない場合、4 で割った余りが 2 か 3 なら復元できますが、余り 1 は正しい Base64 では起こり得ません。コピー時に 1 文字欠けたか増えたということです。途中に = がある場合は、たいてい 2 つの文字列が連結されています。%PDF-、PNG は 89 50 4E 47、DOCX や XLSX などの ZIP ベースの形式は 50 4B 03 04 です。これらのバイトが Base64 の先頭文字を決めるので、デコードする前に形式を読み取れます。ツール内の対応表を参照してください。%%EOF で終わります。末尾 1,024 バイトの中にそれが見つからなければ、ファイルはほぼ確実に途中で切れています。ヘッダーは先頭から 1,024 バイト以内のどこかで始まってもよく、ほとんどのビューアはそのようなファイルも開けるため、報告はしますが拒否はしません。{"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"})か、data URI を使えば、受信側が推測する必要がなくなります。%PDF- で始まるかを確かめてください。フィールドの取り違え、二重エンコード、Base64 化されたエラーページを、1 行のコードで検出できます。multipart/form-data や署名付きダウンロード URL のほうが送信側・受信側ともに軽くなります。BLOB/bytea 列なら 3 分の 1 小さく、VARCHAR のように黙って切り詰められることもありません。Base64 へのエンコードは API の境界でだけ行いましょう。data:application/pdf;base64, プレフィックス、引用符、改行、JSON エスケープは残したままで構いません。自動で取り除かれます。 data: プレフィックスをデータの一部としてデコードした、バイト列をバイナリではなくテキストとして書き込んだ、文字列が途中で切れている(末尾に %%EOF がない)、Base64 が二重にエンコードされている、そもそも PDF ではない(PNG 画像や JSON のエラーメッセージなど)。同じ文字列をここに貼り付ければ、どのケースでもそれぞれ専用の警告が表示されます。 JVBERi0 は PDF、iVBORw0KGgo は PNG、/9j/ は JPEG、R0lGOD は GIF、UEsDB は ZIP(つまり DOCX、XLSX、PPTX も)、H4sI は gzip です。このツールはデコード後のマジックバイトを読んで形式を表示し、対応する拡張子で保存します。 data:application/pdf;base64,JVBERi0…。ブラウザはこれをリンクや src として直接開けます。API が求めるのは通常、カンマより後ろの Base64 部分だけです。 %PDF- で始まっていないからです。表示される形式は、そのバイト列の実際の形式です。よくあるのは、スキャン画像が実は PNG や JPEG だった、DOCX だった、複数の PDF をまとめた ZIP だった、あるいは書類の代わりに JSON や HTML のエラーメッセージが Base64 化されていた、というケースです。 %%EOF というマーカーで終わります。これがない場合、Base64 はほぼ確実に途中で切れています。一部しかコピーされなかった、MySQL の TEXT(65,535 バイト)のようなデータベース列で切り詰められた、ログの行長制限で短くなった、などです。完全な文字列を取得し直してください。欠けたデータはデコードでは取り戻せません。 エンコーディングとフォーマット
ASCII 128文字の完全なコード表。10進・16進・8進・2進を並べ、文字⇔ASCIIコードの双方向変換もその場でできます。制御文字には各言語のエスケープ、キャレット表記、そして実際にどこで出会うかを併記。すべてブラウザ内で動作し、入力は送信されません。
エンコーディングとフォーマット
EAN-13、UPC-A、Code 128、Code 39など15種類のバーコードをSVGまたは印刷用PNGで生成。12桁を入力すればチェックディジットは自動計算されます。末尾が違っていれば、本来あるべき数字をその場で指摘します。
エンコーディングとフォーマット
Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。
エンコーディングとフォーマット
Base64 文字列やデータURIをブラウザ上で画像に戻します。プレビューし、寸法と MIME を確認して、PNG・JPG・GIF・SVG としてダウンロード。アップロード不要。
エンコーディングとフォーマット
CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。
エンコーディングとフォーマット
文字化けしたテキストを貼り付けるだけで元の文字列を復元します。UTF-8、GBK、Big5、Shift_JIS、EUC-KR、Windows-1252 の組み合わせを総当たりで試し、往復検証を通ったチェーンを上位に並べて表示。各エンコードでのバイト対照と hex からの逆変換も可能です。無料・ブラウザ内処理で、貼り付けた内容は送信されません。