文字列エスケープ / アンエスケープ
JSON・JavaScript・Java・C・Python・HTML・XML・CSV・SQL・正規表現・シェルの文字列をエスケープ/アンエスケープ。各言語の実際の挙動で検証し、不正なエスケープは位置を表示。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
Java の \uXXXX と .properties
Java のプロパティファイルは長く ISO-8859-1 が前提で、日本語のメッセージは native2ascii で \uXXXX に変換して書くのが定番でした。Java 9 で ResourceBundle が UTF-8 のプロパティファイルを読めるようになり(JEP 226)、native2ascii ツール自体も JDK 9 で削除されています(Oracle:JDK 9 で削除された機能)。それでも既存プロジェクトには \uXXXX の値が残っています。読むときは Java → アンエスケープ:
入力:msg.notfound=\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
出力:msg.notfound=ファイルが見つかりません
逆向きは Java → エスケープ(非 ASCII:\uXXXX)で ファイルが見つかりません が上の \u30d5…\u3093 になります。
注意点が 2 つあります。Java のソースコードでは \uXXXX が文字列を読む前に置き換えられるため、改行を \u000a と書くとコンパイルエラーになります(JLS 3.10.5)。ツールはエスケープ時に必ず \n を使い、アンエスケープで \u000a を見つけると理由を示してエラーにします。もう 1 つ、この形式は Java の文字列リテラルの規則に従うので、.properties 特有の \: や \= は「Java のエスケープシーケンスではない」と表示されます。
¥ と \ の取り違え
日本語版 Windows のコードページでは 0x5C の位置が円記号で、フォントもバックスラッシュを ¥ で表示します。Microsoft のドキュメントは、Unicode から日本語コードページに変換するとき U+005C と U+00A5 がどちらも同じ 0x5C になると説明しています(Character Sets Used in File Names)。画面の C:¥new¥data を見て打ち直すと、本物の円記号 U+00A5 が入ることがあります。
このテキストを JSON → アンエスケープ に入れても ¥n は改行になりません。U+00A5 はエスケープ文字ではないからです。ツールはテキストを変えずに残し、「¥n の先頭は ¥(U+00A5)で、バックスラッシュではない」と注記します。全角の \(U+FF3C)や ¥(U+FFE5)も同じように検出します。
CSV と全角の =
表計算ソフトは =、+、-、@ で始まるセルを数式として扱います。OWASP の CSV インジェクションのページは、日本語環境などでは全角の = + - @ も数式として解釈されうると明記しています。ツールは全角も検出します:
| 入力 | 数式対策 | 出力 |
|---|---|---|
=1+1 | なし | =1+1(数式として実行されうると注記) |
=1+1 | ' を付ける | "'=1+1" |
' を付ける方法は OWASP のサニタイズ手順そのものですが、OWASP は Excel で保存して開き直すと ' が消えることがあると注意しています。Excel で見る前提なら「タブを付ける」を選ぶと、OWASP が示すタブ前置になります(タブはデータに残ります)。
各形式の規則と検証方法
| 形式 | 規則 | 検証 |
|---|---|---|
| JSON | RFC 8259 第 7 節 | JSON.stringify / JSON.parse、Python json.dumps |
| JavaScript | ECMAScript の文字列リテラル(strict モード) | ""・''・テンプレートリテラルとして評価 |
| Java | JLS 3.3・3.10.7 | javac 21 でコンパイルして出力 |
| C / C++ | C11 6.4.4.4 | cc -std=c11 でコンパイルしてバイト列を出力 |
| Python | 言語リファレンス「字句解析」 | repr()、ascii()、ast.literal_eval |
| HTML / XML | WHATWG の文字参照 / XML 1.0 | entities のデコーダー、Python ElementTree |
| CSV / SQL | RFC 4180 / 引用符の二重化 | Python csv、sqlite3 |
| 正規表現 / シェル | ECMAScript の構文文字 / POSIX のクォート | RegExp(フラグなし・u・v)と Python re、shlex.quote と /bin/sh |
検証スクリプトはリポジトリの scripts/test-string-escape.mjs です。
エラー表示の例
| 入力 | 形式 | 表示 |
|---|---|---|
it\'s | JSON | \'(3 文字目):JSON に \' はありません。’ はそのまま書きます。 |
a\01b | JavaScript | 古い 8 進エスケープで strict モードでは SyntaxError。\x01 と書いてください |
\u000a | Java | javac が文字列を読む前に本物の改行になり、コンパイルできません |
SQL 形式では、OWASP の「エスケープは SQL インジェクションを確実には防げない」という注意を毎回表示します(OWASP SQL Injection Prevention Cheat Sheet)。
ほかのツールとの比較
2026-10-01 にデスクトップ版 Chromium で、Bing の「エスケープ 変換」上位のツールを同じ入力で試しました。
- codertools.net:JavaScript のエスケープで NUL の後ろに
1が続くとa\01(古い 8 進表記)を出力します。\x4、\u{1F600}、JSON の\qはエラーにならずそのまま返ります。CSV の=1+1には何の注意も出ません。 - devlab.itlibra.com:「HTML entities (all non-ASCII)」で 😀 を
��と、UTF-16 の半分ずつの参照 2 つにします。ブラウザはこれを置換文字 2 つとして表示します。JSON の不正なエスケープは「Invalid JSON string escapes」と出ますが、位置は示しません。
このツールは同じ入力に対して \x001、😀、位置付きのエラーを返し、テキストを外部に送りません。
関連ツール
エスケープの前に文字列に見えない文字が混ざっていないか調べるなら見えない文字検出ツール、パーセントエンコードは URL エンコード / デコード、実体参照の一覧は HTML エンティティ エンコーダー / デコーダー、エスケープした正規表現の確認は正規表現テスターが使えます。
制限事項
- 入力は 1 つの文字列値として扱います。CSV のアンエスケープは 1 フィールド、シェルのアンエスケープは引数 1 つだけを読みます。
- Python の
\N{名前}は Unicode の文字名表が必要なため対応していません(エラーで\u/\Uを案内します)。 - HTML のエスケープは本文と引用符付きの属性値が対象です。
<script>内の JavaScript、CSS、URL はそれぞれの規則が必要です。 - 正規表現のエスケープは文字クラス
[...]の外で使う前提です。Python の verbose モード(re.X)では空白と#も構文になります。 - XML 1.0 で使えない文字(ほとんどの C0 制御文字、U+FFFE、U+FFFF、対になっていないサロゲート)はエスケープできず、エラーになります。
FAQ
\u30a8\u30e9\u30fc のような文字列を日本語に戻すには?
形式を JSON か Java にしてアンエスケープを選び、貼り付けます。Java の .properties を native2ascii で変換した値や、Python の json.dumps(既定で ensure_ascii=True)の出力はこの形です。逆に Java で「非 ASCII:\uXXXX」を選ぶと、日本語を \uXXXX に変換できます。
¥n が改行にならないのはなぜですか?
日本語 Windows のフォントはバックスラッシュ(U+005C)を ¥ で表示します。画面を見て打ち直すと本物の円記号 U+00A5 が入ることがあり、これはエスケープ文字ではありません。ツールはテキストをそのまま残し、どの文字が原因かを注記で示します。
アンエスケープで「エスケープされていない " で文字列が終わってしまいます」と出ます
アンエスケープには文字列リテラルの中身を入れます。そこでは " はすべて \" と書かれているはずです。すでに元に戻った JSON({"a":1} など)を貼ると、最初の引用符が指摘されます。入力全体が引用符付きのリテラル("a\nb" など)なら、前後の引用符は自動で外して注記します。
SQL 形式でエスケープすれば SQL インジェクションを防げますか?
防げません。' を '' にすれば正しい文字列リテラルにはなりますが、OWASP はエスケープを「強く非推奨」としています。結果がデータベースや設定、文字コードに左右されるためです。アプリケーションではプレースホルダ(パラメータ化クエリ)を使ってください。SQL 形式は手書きのスクリプトやテストデータ向けです。
入力したテキストはサーバーに送られますか?
送られません。11 形式すべてブラウザ内で計算します。HTML の文字参照はブラウザ自身のパーサーで復元しますが、そのときに使う文書はスクリプトを実行せず、画像も読み込みません。この端末に保存するのは選んだ形式・方向・オプションだけです。