本文へ移動
QKQuickKitEN
エンコードLOCALブラウザ内で処理入力に機密情報を含む可能性があります

Data URI デコーダー

RFC 2397 の data: URI を media type・パラメータ・符号化方式・バイト長・復号テキストに分解します。

入力と主要な処理をブラウザ内で行い、その入力内容をQuickKitサーバーへ送信しない設計です。

実運用中の秘密情報を避け、可能ならダミー値やマスク済みデータを使用してください。 データ取扱いの詳細

仕組みと使い方

data: URI を貼り付けると、宣言された media type、パラメータ(charset など)、payload が base64 かパーセントエンコードか、復号後のバイト長、先頭 16 バイトの 16 進プレビューを表示します。テキスト系 media type(text/*、application/json、+xml、+json、image/svg+xml、application/javascript)では、復号したテキストと復号に使った文字コードも表示します。

解析は RFC 2397(2026-09-02 確認)に従い、media type 省略時は既定の text/plain;charset=US-ASCII を「既定」と明示して表示します。URI はまずブラウザの URL parser と同じく読みます。タブ・LF・CR はどこにあっても取り除き、末尾の空白・制御文字も取り除き、生の # 以降は payload ではなく URL の fragment として扱います(# そのものは %23 と書きます)。取り除いたものは結果に一覧表示します。タブ・LF・CR については Chromium 系のブラウザだけが取り除かずバイトとして残すため、その旨も表示します。data: スキームより前では、URL parser と同じく制御文字と空白(U+0000–U+0020)を取り除きます。そこにある U+00A0 や U+FEFF などの空白はブラウザでは URI が無効になる原因ですが、貼り付けの補助としてだけ取り除き、その旨を表示します。それ以外の payload の文字は、先頭や途中の空白も含めてデータとして扱います。

カンマより前が ;base64 で終わるとき payload を base64 とみなします。ブラウザ(WHATWG Fetch)と同様に大文字小文字を区別せず、セミコロンの後とカンマの前のスペースを許容します。セミコロンのない data:base64, は base64 ではありません。base64 payload もブラウザと同様に先にパーセントデコードするため、%3D はパディングの =、%20 は空白になります。その後 RFC 4648 の構造(アルファベット、パディングの位置と数、最終 quantum)を検証し、base64 payload 内部の ASCII 空白(タブ、LF、FF、CR、スペース)はブラウザと同様に無視しますが、ノーブレークスペース(U+00A0)などそれ以外の空白は不正な文字として拒否します。パーセントエンコードの payload では、raw な非 ASCII 文字を URL 解析後のブラウザと同様に UTF-8 バイトとして扱うため、data:,あ と data:,%E3%81%82 は同じバイト(E3 81 82)になります。直後に 16 進 2 桁が続かない % はそのまま % として扱います。対になっていない UTF-16 サロゲートは UTF-8 で表せないため、U+FFFD に置き換えずに拒否します(WHATWG Fetch の data: URL processor で 2026-10-12 に確認)。

テキスト表示(WHATWG Encoding・Fetch・MIME Sniffing Standard で 2026-10-20 に確認): バイト列を、宣言された charset に対するこのブラウザの TextDecoder で復号します。ラベルは WHATWG Encoding Standard に従い、大文字小文字を区別せず、前後の空白を無視し、別名も受け付けます。そのため iso-8859-1・latin1・us-ascii は windows-1252(0x80 は €)、Shift_JIS・sjis・windows-31j は Shift_JIS として復号します。TextDecoder が受け付けないラベル(csUTF8 のような IANA だけの別名や、replacement encoding に対応付けられる ISO-2022-KR・HZ-GB-2312)、charset の重複指定、media type の位置に書いた charset=(data:charset=…)は、その旨を表示してテキストを表示しません。バイト数と 16 進プレビューは残ります。

charset がない場合、media type 省略時は RFC 2397 の既定 US-ASCII、text/plain は RFC 2046 / RFC 6657 の既定 US-ASCII を使います(どちらもブラウザと同様に windows-1252 として復号し、0x7F を超えるバイトがあれば警告します)。JSON(application/json、+json)と JavaScript は UTF-8 です(RFC 8259、RFC 9239)。それ以外のテキスト系 type(text/html、text/css、XML、SVG など)は文字コードが内容や文脈で決まり、このツールはそれを読まないため、「推定」と明示して UTF-8 で表示します。宣言された charset はどのテキスト系 type でもそのまま使います。JSON では charset パラメータを無視する、BOM を charset より優先するといった type 固有の規則は適用せず、バイト列から復号方式を選ぶこともしません。

不正なバイト列は U+FFFD として表示し、警告を出します。UTF-8 / UTF-16 の decoder が BOM(EF BB BF、FF FE、FE FF)とみなす先頭の U+FEFF は、TextDecoder の既定と同じく復号テキスト・コピー対象から除き、その旨を表示します。バイト数と 16 進プレビューには含まれたままです。

このツールは URI が宣言した内容だけを表示し、復号したバイトから media type を推測しません。入力は 2 MiB までです。