文字列リテラルのエスケープ・復元
テキストツール
読み込み中
ツールを読み込んでいます
ツールのコードは開いたときにのみ読み込まれます。
このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。
このツールについて
コードのテスト用文字列を作成したり、エスケープされた文字列の値をコードの実行なしに調べたりできます。JSON・JavaScript・Python、引用符の種類、リテラル全体か内容のみかを選択してください。エスケープ結果は常に ASCII です。復元は明示的に制限した構文だけを扱い、汎用の言語パーサーではありません。改行、不可視文字、不正な UTF-16 を含む場合は、復元した文字列をコピーする前に ASCII プレビューを確認してください。
主な用途
- 引用符、バックスラッシュ、正確な CRLF 改行を含むテキストから JSON 文字列値を作成する。
- 絵文字、区切り文字、双方向制御文字を可視エスケープで表す JavaScript・Python のテストデータを用意する。
- ログ内の既知の単一リテラルやその内容を、式の評価やコードの読み込みなしに確認する。
使い方
- 1.言語、エスケープまたは復元、リテラル全体または内容のみを選びます。JSON は二重引用符、JavaScript と Python は一重・二重引用符を選択できます。エスケープ入力はエスケープ表記に見えても生のテキストとして扱います。
- 2.テキストを貼り付けるか、厳密な UTF-8 ファイルを一つ読み込みます。リテラル全体の復元には対応する外側の引用符が必要で、周囲の式は許可されません。内容のみでは外側の引用符を省きますが、選択した区切り文字の規則は適用されます。変換を実行してください。
- 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 には専用の方法が必要です。