DevToolBox

「illegal base64 character」エラーの原因と直し方

最終更新日: 2026-07-21公開日: 2026-07-21執筆: DevToolBox編集部

illegal base64 character 5fillegal base64 character 7b は、入力に標準Base64で使えない文字があるという意味です。 末尾の値は、多くの場合、問題の文字を表す16進数です。「base64 使えない文字」「base64 禁止文字」「base64 禁則文字」を整理して直し方を解説します。

An illegal base64 charactererror means the input contains a character outside the decoder's alphabet. The hexadecimal suffix often identifies it.

TL;DR

1. Base64の使用可能文字 / Allowed characters

標準Base64が使うのは A-Za-z0-9+/ の64文字です。= は末尾のパディング専用です。それ以外のスペース、改行、日本語、全角文字、記号が混入するとエラーになります。

標準 Base64:     A-Z  a-z  0-9  +  /  (= は末尾のみ)
URL-safe Base64: A-Z  a-z  0-9  -  _  (= は省略可能)
                                   ↑  ↑
                              + と / の置き換え

2. 5c・5f・7b・5bは何を表すか / Hex codes

illegal base64 character 5c はバックスラッシュ、illegal base64 character 5f はアンダースコアです。 RFC 4648 Section 5 のURL-safe Base64は、標準版の +-/_ に置き換えます。

コード文字典型的な原因
5c\JSONのエスケープやWindowsパスが混入
5f_URL-safe Base64を標準デコーダーへ渡した
7b{JSONオブジェクト全体を渡した
5b[JSON配列全体を渡した

_ はURL-safe版では正しくても標準デコーダーには禁止文字です。{[ はどちらにも含まれず、JSON文字列・配列をそのまま渡した典型例です。

3. エラー原因の切り分け / Troubleshooting table

症状・入力原因対処
長い値のコピペで失敗自動改行されたCR/LFが混入空白と改行を除去
-_ があるURL-safe版を標準デコーダーへ入力URL-safe対応で復号する
data:image/png;base64, で始まるData URI接頭辞を含めている最初のカンマまでを除去
見た目は正しいのに失敗全角スペースなど文字化けしたコピー不可視文字を確認して再コピー

4. 入力を正規化して直す / Normalize the input

まず不要な接頭辞、空白、タブ、改行を除去します。URL-safe版なら対応デコーダーを使うか、-_+/ に戻し、長さが4の倍数になるよう = を補います。

function normalizeBase64(input) {
  const body = input.replace(/^data:[^,]*;base64,/i, "").replace(/\s/g, "");
  const standard = body.replace(/-/g, "+").replace(/_/g, "/");
  const remainder = standard.length % 4;
  return remainder ? standard + "=".repeat(4 - remainder) : standard;
}

const decoded = atob(normalizeBase64(input));

当サイトの Base64 Encoder / Decoder は通常のBase64とURL-safe Base64の両方に対応しています。 入力形式を選び、まず不要な接頭辞・空白・改行を除去してから再試行してください。

どの言語・環境でこのエラーが出るか / Where this message comes from

illegal base64 characterという文言そのものは、多くの場合Javaのjava.util.Base64.getDecoder()が 投げるIllegalArgumentException: Illegal base64 character 3cのような例外メッセージに由来します。 同じ問題でも言語・実行環境によってメッセージや挙動は異なります。

言語・環境 / Language不正文字が混入した場合の挙動
Java (java.util.Base64)IllegalArgumentException: Illegal base64 character 3cのように例外を投げて停止する
ブラウザ (atob())DOMException: The string to be decoded is not correctly encoded.で例外を投げる
Python (base64.b64decode)既定(validate=False)では不正文字を黙って無視して復号を続ける。validate=Trueを指定して初めて例外になる
Node.js (Buffer.from(str, "base64"))例外を投げず、不正文字を無視して途中まで復号された結果を返す(サイレントに壊れる)
Go (encoding/base64)illegal base64 data at input byte Nとバイト位置付きのエラーを返す

PythonやNode.jsは既定では例外を投げずに不正文字を無視するため、「エラーは出ないのに結果が壊れている」場合は これらの環境を疑ってください。厳密に検証したい場合はPythonならvalidate=Trueを明示します。

メール由来のBase64(76文字改行)に注意 / MIME line-wrapped Base64

メール添付(RFC 2045 MIME)のBase64は76文字ごとにCRLFで改行される仕様です。この改行自体は正しい仕様ですが、 改行を除去しない前提の厳密なデコーダーにそのまま貼り付けると、改行文字が不正文字として扱われることがあります。 本記事の「入力を正規化して直す」で示した通り、改行・空白を一律で除去してから復号すればこの種のエラーは回避できます。

5. English summary

Standard Base64 accepts only A-Z, a-z, 0-9, +, /, plus trailing = padding. Hex 5c is a backslash, 5f an underscore, 7b an opening brace, and 5b an opening bracket. An underscore usually indicates Base64URL; braces or brackets usually mean JSON was passed instead of its Base64 field. Strip Data URI prefixes and whitespace, then use the matching decoder.

関連ツール / Related tools

関連ガイド / Related guides