ToolDeck

字符串转义

对 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 密钥、令牌或用户数据时尤为重要。
📋
无需登录或安装
打开页面即可开始粘贴。无需创建账户,无需安装扩展,也没有 Cookie 同意弹窗阻碍使用。

字符串转义使用场景

前端开发
在将用户生成的内容注入 HTML 属性、内联脚本或模板字面量之前进行转义。防止未转义的引号或尖括号导致标记损坏或产生 XSS 漏洞。
后端 API 集成
构建包含含换行符、制表符或引号的嵌入字符串的 JSON 请求体。正确转义可防止生成格式错误的 JSON,避免接收方 API 返回 400 错误。
DevOps 与配置
为 JSON 配置文件、YAML heredoc 或环境变量编写转义字符串。Dockerfile ENV 或 Kubernetes ConfigMap 中放错位置的反斜杠可能导致部署失败。
QA 与测试数据
生成包含嵌入控制字符、Unicode 序列和嵌套引号的测试字符串。这类边界情况字符串用于验证解析器和序列化器能否正确处理特殊字符。
数据工程
清理来自 CSV 导出、日志聚合器或数据库转储的双重转义数据。经过多层序列化的字段往往会积累多余的反斜杠,需要逐层剥离。
学习与调试
观察不同语言如何表示同一字符串。编程新手可以并排比较 JavaScript、Python 和 JSON 的转义方式,从而理解它们之间的差异。

转义序列参考表

下表列出了常见的转义序列,以及它们在 JavaScript、Python 和 JSON 中是否受支持。三种语言共享核心集合(换行符、制表符、反斜杠、双引号),但在单引号、十六进制转义和扩展 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 转义对比

虽然这三种格式共享相同的反斜杠语法,但在有效序列和边界情况处理上存在差异。选错模式会产生看似正确但在解析时失败的输出。

JavaScript
支持 \x 十六进制转义、\u{...} 用于完整 Unicode 范围(BMP 之外)、\v 垂直制表符以及 \0 空字符。单引号和双引号均可转义。模板字面量(反引号)可避免大多数转义需求。
Python
与 JavaScript 相同的核心序列,另加 \x 十六进制转义和 \N{name} 用于命名 Unicode 字符。原始字符串(r"...")完全禁用转义处理。单引号和双引号均可转义。
JSON
限制最严格的格式。只有 \"(双引号)、\\、\/、\n、\r、\t、\b、\f 和 \uNNNN 有效。不支持单引号转义(JSON 字符串始终使用双引号)。不支持十六进制转义、\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 编码用百分号十六进制序列替换不安全字符。转义保留可读性;编码则完全改变格式。
为什么我的字符串出现双反斜杠(\\\\)而不是单反斜杠?
双反斜杠出现是因为字符串被转义了两次。这常见于数据经过多层序列化的情况——例如,存储在另一个 JSON 字符串内的 JSON 值,或在写入文件前经过 JSON 编码的日志行。解决方法是逐层对字符串进行反转义,直到还原原始内容。
如何在 JavaScript 中对 JSON 字符串进行转义?
使用 JSON.stringify()。它会用双引号包裹字符串,并转义 JSON 所要求的所有字符:反斜杠、双引号、换行符、制表符以及 U+0020 以下的控制字符。如果只需要不带外层引号的内部内容,可使用 JSON.stringify(str).slice(1, -1)。
JSON 字符串可以包含单引号吗?
不可以。JSON 规范(RFC 8259)要求所有字符串必须用双引号分隔。单引号在 JSON 中不是有效的字符串分隔符。虽然部分宽松的解析器可以接受单引号,但任何符合标准的 JSON 解析器都会拒绝用单引号包裹的字符串。如果字符串内容包含单引号字符,它可以原样出现在双引号 JSON 字符串内——无需转义。
什么是 Python 的原始字符串?
原始字符串(以 r 为前缀,如 r"C:\Users\name")告诉 Python 解释器将反斜杠视为普通字符而非转义标记。这对 Windows 文件路径、正则表达式以及需要保留反斜杠的字符串非常有用。注意,原始字符串不能以奇数个反斜杠结尾,因为末尾的反斜杠会转义结束引号。
如何在 JavaScript 中转义 Unicode 字符?
JavaScript 支持两种 Unicode 转义形式。\uNNNN 语法处理基本多文种平面(U+0000 至 U+FFFF)内的字符,例如 \u00e9 表示"带重音的 e"。对于 BMP 之外的字符(表情符号、罕见文字),使用 \u{NNNNN} 加最多六位十六进制数——例如 \u{1F600} 表示咧嘴笑脸表情。\u{'} 形式在 ES2015 中引入。
字符串转义与安全性(XSS、SQL 注入)有关系吗?
语言级转义和安全转义目的不同,但理念相同:防止特殊字符被解释为代码。对于 XSS 防护,需要转义 HTML 实体(<、>、&)。对于 SQL 注入,应使用参数化查询而非手动转义。本工具处理的是语言级字符串转义(反斜杠序列),不涉及 HTML 或 SQL 转义。