戻る

文字列リテラルのエスケープ・復元

テキストツール

読み込み中

ツールを読み込んでいます

ツールのコードは開いたときにのみ読み込まれます。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

コードのテスト用文字列を作成したり、エスケープされた文字列の値をコードの実行なしに調べたりできます。JSON・JavaScript・Python、引用符の種類、リテラル全体か内容のみかを選択してください。エスケープ結果は常に ASCII です。復元は明示的に制限した構文だけを扱い、汎用の言語パーサーではありません。改行、不可視文字、不正な UTF-16 を含む場合は、復元した文字列をコピーする前に ASCII プレビューを確認してください。

主な用途

  • 引用符、バックスラッシュ、正確な CRLF 改行を含むテキストから JSON 文字列値を作成する。
  • 絵文字、区切り文字、双方向制御文字を可視エスケープで表す JavaScript・Python のテストデータを用意する。
  • ログ内の既知の単一リテラルやその内容を、式の評価やコードの読み込みなしに確認する。

使い方

  1. 1.言語、エスケープまたは復元、リテラル全体または内容のみを選びます。JSON は二重引用符、JavaScript と Python は一重・二重引用符を選択できます。エスケープ入力はエスケープ表記に見えても生のテキストとして扱います。
  2. 2.テキストを貼り付けるか、厳密な UTF-8 ファイルを一つ読み込みます。リテラル全体の復元には対応する外側の引用符が必要で、周囲の式は許可されません。内容のみでは外側の引用符を省きますが、選択した区切り文字の規則は適用されます。変換を実行してください。
  3. 3.ASCII プレビューと UTF-16 の長さを確認してから、完全な結果をコピーまたは保存します。復元結果に孤立サロゲートがある場合、生のクリップボード・UTF-8 出力は無効です。入力や設定を変更すると前の結果は無効になり、再変換が必要です。

使用例:正確な要求と期待結果

引用符とスラッシュ類

{"input":"say \"hi\" / C:\\tmp","mode":"json","quote":"double","operation":"escape","form":"literal"}
{"output":"\"say \\\"hi\\\" / C:\\\\tmp\"","utf8Safe":true}

スラッシュはそのまま、引用符とバックスラッシュはエスケープします。

CRLF と制御文字を保持

{"input":"A\r\n\t\u0000\b\f","mode":"json","quote":"double","operation":"escape","form":"literal"}
{"output":"\"A\\r\\n\\t\\u0000\\b\\f\"","utf8Safe":true}

CR と LF は別々に保持し、NUL は明示的な 4 桁表記になります。

JavaScript の一重引用符

{"input":"don't","mode":"javascript","quote":"single","operation":"escape","form":"literal"}
{"output":"'don\\'t'","utf8Safe":true}

ここでは選択した一重引用符だけをエスケープします。

JSON の絵文字

{"input":"\ud83d\ude00","mode":"json","quote":"double","operation":"escape","form":"literal"}
{"output":"\"\\ud83d\\ude00\"","utf8Safe":true}

一つの補助平面文字を二つの UTF-16 サロゲートで表します。

Python の絵文字

{"input":"\ud83d\ude00","mode":"python","quote":"double","operation":"escape","form":"literal"}
{"output":"\"\\U0001f600\"","utf8Safe":true}

同じスカラーを Python の 8 桁 Unicode 表記で示します。

区切り文字と双方向制御

{"input":"\u2028\u2029\u202e","mode":"json","quote":"double","operation":"escape","form":"literal"}
{"output":"\"\\u2028\\u2029\\u202e\"","utf8Safe":true}

三つの不可視文字をすべて可視 ASCII に変換します。

外側の引用符だけを省略

{"input":"line\nend","mode":"json","quote":"double","operation":"escape","form":"content"}
{"output":"line\\nend","utf8Safe":true}

改行のエスケープを保持し、外側の引用符は追加しません。

JSON のスラッシュを復元

{"input":"\"a\\/b\"","mode":"json","quote":"double","operation":"unescape","form":"literal"}
{"output":"a/b","utf8Safe":true}

許可されたスラッシュのエスケープを通常のスラッシュに戻します。

JavaScript の拡張を復元

{"input":"\"\\x41\\u{1F600}\\v\\0\"","mode":"javascript","quote":"double","operation":"unescape","form":"literal"}
{"output":"A\ud83d\ude00\u000b\u0000","utf8Safe":true}

十六進数、波括弧 Unicode、垂直タブ、単独のゼロを受け付けます。

Python の拡張を復元

{"input":"\"\\a\\v\\x41\\U0001F600\"","mode":"python","quote":"double","operation":"unescape","form":"literal"}
{"output":"\u0007\u000bA\ud83d\ude00","utf8Safe":true}

ベル、垂直タブ、十六進数、8 桁 Unicode を受け付けます。

孤立サロゲートを診断用に保持

{"input":"\"\\uD800\"","mode":"json","quote":"double","operation":"unescape","form":"literal"}
{"output":"\ud800","utf8Safe":false}

UTF-16 単位を正確に保持し、生の UTF-8・クリップボード出力を禁止します。

JSON の十六進表記を拒否

{"input":"\"\\x41\"","mode":"json","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

JSON は xHH に対応していません。

テンプレートを拒否

{"input":"`hello ${name}`","mode":"javascript","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

テンプレートの補間は評価しません。

Python raw 接頭辞を拒否

{"input":"r\"\\n\"","mode":"python","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

raw 接頭辞付き文字列は対象のサブセット外です。

曖昧な Python サロゲートを拒否

{"input":"\"\\uD83D\\uDE00\"","mode":"python","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

この Python スカラーには一つの 8 桁 U 表記を使用します。

未知のエスケープを拒否

{"input":"\"\\q\"","mode":"javascript","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

限定デコーダーは未知のエスケープを推測せず拒否します。

八進数を拒否

{"input":"\"\\141\"","mode":"python","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

言語ランタイムが対応していても、本ツールでは八進数を除外します。

式を拒否

{"input":"\"a\" + \"b\"","mode":"javascript","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

一つのリテラルのみを受け付け、ソース式は扱いません。

三重引用符を拒否

{"input":"\"\"\"hello\"\"\"","mode":"python","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

三重引用符は通常リテラルの対象範囲外です。

行継続を拒否

{"input":"\"a\\\nb\"","mode":"javascript","quote":"double","operation":"unescape","form":"literal"}
{"rejected":true}

バックスラッシュ直後の物理改行は対象外です。

よくある誤りと非対応の表記

  • JSON に一重引用符リテラルや JavaScript の xHH を指定する。
  • リテラル全体に周囲のコード、セミコロン、連結した文字列を含める。
  • Python の raw・f-string・bytes 接頭辞や三重引用符を使用する。
  • 未知のエスケープ、八進数、バックスラッシュと物理改行の組み合わせを期待する。
  • 内容のみの出力を外側の引用符付きの完全な文字列と取り違える。
  • ASCII プレビューを復元した生文字列と混同したり、機密文字列のエスケープを伏字と考えたりする。

制限と注意事項

  • 入力は 65,536 UTF-16 単位、出力は 524,288 単位、ローカル UTF-8 ファイルは 262,144 バイトまでです。不正な UTF-8 は拒否し、先頭の U+FEFF は保持します。コアは正規化や改行変換を行いませんが、ブラウザーの貼り付けやクリップボードの動作は異なる場合があります。上限超過はエラーとなり、出力を黙って切り詰めません。 エスケープで 65,536 単位の入力上限を超える場合があり、大きな生成リテラルを本ツールに再入力して復元できるとは限りません。完全なプレビューは最大 393,218 文字、画面表示は最大 8,192 文字で省略を明示します。保存済みの完全な結果は切り詰めません。
  • 各言語の限定サブセットです。式、コメント、連結、テンプレート、三重引用符、raw/bytes/f-string 接頭辞、名前付き Unicode エスケープ、八進数、未知のエスケープ、行継続は対象外です。言語ランタイムでは有効でも、本ツールの制限により拒否する場合があります。 復元では生の C0 制御文字と DEL を拒否するため、エスケープを使用してください。Python は生の孤立サロゲートと、バックスラッシュとゼロを含むすべての八進表記も拒否します。JavaScript の波括弧 Unicode 表記は 1–6 桁の十六進数に対応します。
  • JSON は標準の引用符、バックスラッシュ、スラッシュ、b/f/n/r/t、4 桁 Unicode エスケープに対応します。JavaScript は xHH、u{...}、v、後ろに数字が続かないゼロにも対応します。Python は引用符・バックスラッシュ、a/b/f/n/r/t/v、xHH、4 桁 u、8 桁 U に対応し、スラッシュのエスケープは受け付けません。別言語へ表記を移す際は対象の規則を確認してください。
  • 補助平面文字は JSON/JavaScript では二つの 4 桁サロゲートエスケープ、Python では一つの 8 桁 U エスケープになります。Python の復元では、二つの Python コードポイントを一つの JavaScript スカラーに黙って統合しないよう、隣接する高位・低位サロゲートのエスケープを拒否します。孤立サロゲートは ASCII 表記として保持できますが、復元した生文字列は有効な UTF-8 にならず、コピー・保存できません。
  • 変換はローカルで行い、入力のアップロードやコード実行はしません。制御文字、U+2028/U+2029、双方向文字は ASCII プレビューに可視表記で示します。エスケープは暗号化や伏字処理ではなく、HTML、script 要素、SQL、shell で自動的に安全になるわけでもありません。出力先の文脈に応じた処理が必要です。

よくある質問

リテラル全体と内容のみの違いは?

リテラル全体には選択した外側の引用符が付きます。内容のみは外側の引用符を省きますが、選択した引用符のエスケープ・検査は行います。既存の引用符内に挿入する用途であり、引用符なしの式ではありません。下の例はバックスラッシュを明確にするため、要求と期待結果を ASCII JSON で示しています。

復元すると JavaScript や Python が実行されますか?

いいえ。説明した限定構文だけを解析します。eval、コードの読み込み、式の評価は行いません。バッククォート、補間、接頭辞、連結は実行せず拒否します。

JSON で使える二つのサロゲートエスケープを Python では拒否する理由は?

Python はそれぞれを独立したサロゲートのコードポイントとして扱います。一方、JavaScript の UTF-16 単位は一つの補助平面文字に結合し得ます。この曖昧さを避けるため拒否し、目的のスカラーには一つの 8 桁 U エスケープを使用します。

変換成功後は HTML やデータベースのクエリに直接使えますか?

成功は選択した表現の変換が完了したことだけを示します。通常の文字列引用符をエスケープしても、HTML の script 終了列は防げません。HTML には文脈に応じたシリアライズ、SQL にはパラメーター化クエリ、shell には専用の方法が必要です。

関連ツール