ToolDeck

String Escape

JavaScript、Python、JSON用の文字列エスケープ・アンエスケープ

サンプルを試す

入力

出力

ローカルで実行 · シークレットの貼り付けも安全
結果がここに表示されます…
モード:

文字列エスケープとは?

文字列エスケープとは、文字列リテラル内で特別な意味を持つ文字の前にバックスラッシュ(またはその他のマーカー)を挿入するプロセスです。プログラミング言語のパーサーがダブルクォートで囲まれた文字列内でダブルクォートを検出すると、それを文字列の終端として解釈します。バックスラッシュでクォートをエスケープする — "の代わりに\"と記述する — ことで、パーサーはそれをデリミタではなくリテラル文字として扱います。文字列リテラルを使用するすべての言語にはエスケープルールがありますが、正確なシーケンスは言語によって異なります。

最も一般的なエスケープシーケンスは、ソースコードに直接記述できない空白文字や制御文字に対応しています。改行は\n、タブは\t、リテラルのバックスラッシュは\\になります。これらの規約はC言語(ISO/IEC 9899)に遡り、JavaScript(ECMA-262)、Python、Java、Go、Rustに採用されています。JSON(RFC 8259)は同じ構文を使用しますが、サポートするシーケンスのセットはより小さくなっています。

アンエスケープ(「デエスケープ」とも呼ばれます)は逆の操作で、エスケープシーケンスを元の文字に変換します。これはログファイルの読み取り、APIレスポンスの解析、二重エスケープされたデータのデバッグ時によく行われます。どちらの操作も機械的なものですが、手作業では間違いが起きやすいため、複数行の文字列、埋め込みクォート、またはUnicode文字を扱う際に開発者がエスケープ・アンエスケープツールを使用する理由です。

オンライン文字列エスケープツールを使う理由

バックスラッシュを手動で追加・削除する作業は面倒で、特にネストされたクォートや複数行の入力では間違いが起きやすいです。ブラウザベースの文字列エスケープツールは、REPLをセットアップしたり使い捨てスクリプトを書いたりすることなく、即座に結果を提供します。

即時変換
テキストを貼り付けるだけで、エスケープまたはアンエスケープされた結果が即座に得られます。ターミナルを開いたり、REPLを起動したり、ワンオフのスクリプトを書く必要はありません。
🔀
フォーマット切り替え
JavaScript、Python、JSONのエスケープモードを切り替えられます。各言語はシングルクォート、Unicode、制御文字の扱いが異なりますが、ツールが正しいルールを自動的に適用します。
🔒
プライバシー優先の処理
すべてのエスケープ・アンエスケープ処理はJavaScriptを使用してブラウザ内で行われます。APIキー、トークン、ユーザーデータを扱う際に重要な点として、文字列がサーバーに送信されることはありません。
📋
ログインやインストール不要
ページを開いてすぐに貼り付け作業を始められます。アカウントの作成も、拡張機能のインストールも、ツールを遮るクッキー同意ウォールも必要ありません。

文字列エスケープのユースケース

フロントエンド開発
ユーザー生成コンテンツをHTML属性、インラインスクリプト、またはテンプレートリテラルに挿入する前にエスケープします。エスケープされていないクォートや山括弧によるマークアップの破損やXSSベクターを防ぎます。
バックエンドAPI連携
改行、タブ、クォートを含む文字列を埋め込んだJSONリクエストボディを構築します。適切なエスケープにより、受信APIから400エラーが返される原因となる不正なJSONを防ぎます。
DevOpsと設定
JSONの設定ファイル、YAMLのヒアドキュメント、または環境変数向けにエスケープされた文字列を記述します。DockerfileのENVやKubernetesのConfigMapにおけるバックスラッシュの誤配置は、デプロイを壊す可能性があります。
QAとテストデータ
埋め込み制御文字、Unicodeシーケンス、ネストされたクォートを含むテスト文字列を生成します。これらのエッジケース文字列は、パーサーとシリアライザーが特殊文字を正しく処理することを検証するために必要です。
データエンジニアリング
CSVエクスポート、ログアグリゲータ、データベースダンプからの二重エスケープされたデータをクリーンアップします。複数のシリアライゼーション層を通過したフィールドは、削除が必要な余分なバックスラッシュが蓄積されることがよくあります。
学習とデバッグ
異なる言語が同じ文字列をどのように表現するかを確認します。言語を学習中の学生や開発者は、JavaScript、Python、JSONのエスケープを並べて比較することで、その違いを理解できます。

エスケープシーケンスリファレンス

以下の表は一般的なエスケープシーケンスと、JavaScript、Python、JSONでのサポート状況を示しています。3つの言語はコアセット(改行、タブ、バックスラッシュ、ダブルクォート)を共有していますが、シングルクォート、16進数エスケープ、拡張Unicode表記については異なります。

シーケンス意味JavaScriptPythonJSON
\nNewline (LF)YesYesYes
\rCarriage returnYesYesYes
\tTabYesYesYes
\\BackslashYesYesYes
\"Double quoteYesYesYes
\'Single quoteYesYesNo
\bBackspaceYesYesYes
\fForm feedYesYesYes
\vVertical tabYesYesNo
\0Null characterYesYesNo
\xNNHex byteYesYesNo
\uNNNNUnicode (BMP)YesYesYes
\u{N..}Unicode (full)YesNoNo

JavaScript vs Python vs JSONのエスケープ比較

これら3つのフォーマットは同じバックスラッシュベースの構文を共有していますが、有効なシーケンスやエッジケースの処理方法が異なります。間違ったモードを選択すると、見た目は正しいが解析時に失敗する出力が生成されます。

JavaScript
\x 16進数エスケープ、BMP範囲を超える完全なUnicode用の \u{'...'}、垂直タブ用の \v、ヌル用の \0 をサポートします。シングルクォートとダブルクォートの両方をエスケープできます。テンプレートリテラル(バッククォート)はほとんどのエスケープの必要性を回避します。
Python
JavaScriptと同じコアシーケンスに加え、\x 16進数エスケープと名前付きUnicode文字用の \N{'name'} をサポートします。Rawストリング(r"...")はエスケープ処理を完全に無効にします。シングルクォートとダブルクォートの両方がエスケープ可能です。
JSON
最も制限の多いフォーマットです。\"(ダブルクォート)、\\、\/、\n、\r、\t、\b、\f、および \uNNNN のみが有効です。シングルクォートのエスケープはありません(JSONの文字列は常にダブルクォートを使用します)。16進数エスケープ、\v、\0 はありません。制御文字(U+0000からU+001F)はすべて \uNNNN 表記を使用する必要があります。

コード例

JavaScript、Python、Go、およびコマンドラインでの文字列のエスケープ・アンエスケープの例です。

JavaScript
// Escape a string with special characters
const raw = 'Line 1\nLine 2\tTabbed "quoted"';
const escaped = JSON.stringify(raw);
// → '"Line 1\\nLine 2\\tTabbed \\"quoted\\""'

// Unescape a JSON string value
const input = '"Hello\\nWorld"';
const unescaped = JSON.parse(input);
// → "Hello\nWorld" (actual newline character)

// Template literals don't need quote escaping
const tpl = `She said "hello"`;
// → 'She said "hello"' — no backslashes needed

// Escape for use inside a RegExp
const query = 'price: $5.00 (USD)';
const safe = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// → "price: \\$5\\.00 \\(USD\\)"
Python
# Escape with repr() — shows escape sequences
raw = "Line 1\nLine 2\t'quoted'"
print(repr(raw))
# → "Line 1\nLine 2\t'quoted'"

# Raw strings skip escape processing
path = r"C:\Users\name\Documents"
print(path)
# → C:\Users\name\Documents (backslashes kept literal)

# JSON escaping with json module
import json
data = 'He said "hello\nworld"'
escaped = json.dumps(data)
# → '"He said \\"hello\\nworld\\""'

# Unicode escaping
text = "Caf\u00e9"  # → "Café"
print(text.encode('unicode_escape').decode())
# → "Caf\\xe9"
Go
package main

import (
    "fmt"
    "strconv"
    "encoding/json"
)

func main() {
    // strconv.Quote adds escape sequences and wraps in quotes
    raw := "Line 1\nLine 2\t\"quoted\""
    fmt.Println(strconv.Quote(raw))
    // → "\"Line 1\\nLine 2\\t\\\"quoted\\\"\""

    // strconv.Unquote reverses it
    unescaped, _ := strconv.Unquote(`"hello\nworld"`)
    fmt.Println(unescaped)
    // → hello
    //   world

    // JSON marshal handles escaping automatically
    b, _ := json.Marshal("tabs\there & \"quotes\"")
    fmt.Println(string(b))
    // → "tabs\there \u0026 \"quotes\""
}
CLI (Bash)
# Use $'...' syntax for escape sequences in bash
echo $'Line 1\nLine 2\tTabbed'
# → Line 1
#    Line 2	Tabbed

# printf interprets escape sequences
printf 'Path: C:\\Users\\name\n'
# → Path: C:\Users\name

# Use jq to escape a string for JSON
echo 'He said "hello"' | jq -Rs .
# → "He said \"hello\"\n"

# Unescape JSON string with jq
echo '"Line 1\\nLine 2"' | jq -r .
# → Line 1
#    Line 2

よくある質問

エスケープとエンコードの違いは何ですか?
エスケープは、言語パーサーがそれらをシンタックスではなくデータとして扱うよう、文字列リテラル内の特殊文字の前にバックスラッシュを追加します。エンコードは文字列全体を別の表現に変換します — 例えば、Base64エンコードはバイナリをASCIIテキストに変換し、URLエンコードは安全でない文字をパーセントHEXシーケンスに置き換えます。エスケープは可読性を保ちますが、エンコードはフォーマットを完全に変更します。
なぜ文字列に二重バックスラッシュ(\\\\)が含まれるのですか?
二重バックスラッシュは、文字列が二重にエスケープされた場合に現れます。これはデータが複数のシリアライゼーション層を通過する際によく発生します — 例えば、別のJSON文字列内に格納されたJSON値、またはファイルに書き込む前にJSONエンコードされたログ行などです。修正するには、元のコンテンツに到達するまで一度に一層ずつ文字列をアンエスケープしてください。
JavaScriptでJSON用の文字列をエスケープするにはどうすればよいですか?
JSON.stringify()を使用してください。これは文字列をダブルクォートで囲み、JSONが必要とするすべての文字をエスケープします:バックスラッシュ、ダブルクォート、改行、タブ、U+0020未満の制御文字。周囲のクォートなしで内側のコンテンツのみが必要な場合は、JSON.stringify(str).slice(1, -1)を使用してください。
JSON文字列にシングルクォートを含めることはできますか?
いいえ。JSON仕様(RFC 8259)では、すべての文字列をダブルクォートで区切ることが必要です。シングルクォートはJSONで有効な文字列デリミタではありません。一部の寛容なパーサーはそれらを受け入れますが、標準準拠のJSONパーサーはシングルクォートで囲まれた文字列を拒否します。文字列にシングルクォート文字が含まれている場合、ダブルクォートで囲まれたJSON内にそのまま記述できます — エスケープは不要です。
PythonのRawストリングとは何ですか?
Rawストリング(r"C:\Users\name"のようにrプレフィックスを付ける)は、Pythonインタープリターにバックスラッシュをエスケープマーカーではなくリテラル文字として扱うよう指示します。これはWindowsファイルパス、正規表現、バックスラッシュを保持すべき文字列に役立ちます。なお、Rawストリングは末尾のバックスラッシュが閉じクォートをエスケープしてしまうため、奇数個のバックスラッシュで終わることができません。
JavaScriptでUnicode文字をエスケープするにはどうすればよいですか?
JavaScriptは2つのUnicodeエスケープ形式をサポートしています。\uNNNN構文は基本多言語面(U+0000からU+FFFF)の文字を処理します(例:'アキュートアクセント付きe'の場合は\u00e9)。BMP外の文字(絵文字、稀なスクリプト)には、最大6桁の16進数を使った \u{'NNNNN'} を使用します — 例えば、グリニングフェイス絵文字には \u{'1F600'} です。\u{'}' 形式はES2015で導入されました。
文字列エスケープはセキュリティ(XSS、SQLインジェクション)と関係がありますか?
言語レベルのエスケープとセキュリティエスケープは異なる目的を果たしますが、基本的な考え方は同じです:特殊文字がコードとして解釈されることを防ぐこと。XSS防止のためにはHTMLエンティティ(<、>、&)をエスケープします。SQLインジェクションのためには、手動エスケープの代わりにパラメータ化クエリを使用します。このツールは言語レベルの文字列エスケープ(バックスラッシュシーケンス)を処理し、HTMLやSQLのエスケープは対象外です。