返回

字符串字面量转义 / 反转义

文本处理

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

为代码测试准备一个字符串,或在不执行代码的前提下检查转义字符串实际表示的内容。先选择 JSON、JavaScript 或 Python,再明确引号类型以及完整字面量或仅转义内容模式。转义结果始终为 ASCII;反转义只接受明确限定的语法子集,不是通用程序语言解析器。复制解码文本之前,应先检查 ASCII 预览,尤其注意换行、不可见字符和不完整的 UTF-16 代理项。

常见用途

  • 将含双引号、反斜杠和精确 CRLF 换行的文本生成 JSON 字符串值。
  • 为 JavaScript 或 Python 测试构造可见的 emoji、分隔符及双向控制字符转义。
  • 解码已知日志中的单个字面量或其内容,不运行表达式或导入代码。

使用方法

  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 使用明确的四位转义。

JavaScript 单引号

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

此处只需转义所选单引号分隔符。

JSON 中的 emoji

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

一个补充平面字符使用两个 UTF-16 代理项转义。

Python 中的 emoji

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

同一标量使用 Python 八位 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}

接受响铃、垂直制表、十六进制及八位 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}

请使用单个八位 U 转义表示这个 Python 标量。

拒绝未知转义

{"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 和四位 Unicode 转义。JavaScript 另支持 xHH、u{...}、v,以及后面不跟数字的零转义。Python 支持引号、反斜杠、a/b/f/n/r/t/v、xHH、四位 u 及八位 U 转义,不接受斜杠转义。跨语言复制转义写法前,应核对目标语法。
  • 补充平面字符在 JSON/JavaScript 中输出两个四位代理项转义,在 Python 中输出一个八位 U 转义。Python 解码拒绝相邻的高、低代理项转义,以免把两个 Python 码点悄悄合并为一个 JavaScript 标量。孤立代理项可以保存在 ASCII 转义文本中;含孤立代理项的解码原文不能表示为有效 UTF-8,因此禁止复制和下载。
  • 转换在本地执行,不上传输入,也不执行其中的代码。ASCII 预览展示控制字符、U+2028/U+2029 和双向字符的转义形式,不直接渲染它们。转义不是加密或脱敏,也不会自动使结果适用于 HTML、script 元素、SQL 或 shell;仍需使用目标上下文的专用规则。

常见问题

完整字面量和仅内容模式有什么区别?

完整字面量包含所选外围引号。仅内容模式省略外围引号,但仍转义并检查所选引号分隔符,适合放入已有引号的位置,不适合直接用作无引号表达式。示例以 ASCII JSON 展示请求与预期结果,让每个反斜杠都明确可见。

反转义会执行 JavaScript 或 Python 吗?

不会。工具只解析已说明的转义子集,不使用 eval、不导入代码,也不解释表达式。反引号、插值、前缀及拼接都会被拒绝。

为什么 JSON 可接受的两个代理项转义在 Python 模式会被拒绝?

Python 将这些转义看作两个单独的代理码点,JavaScript 字符串却可能把对应的 UTF-16 单元合为一个补充平面字符。为避免歧义,本工具拒绝这种 Python 写法;若需要该标量,应使用一个八位 U 转义。

转换成功后能直接放进 HTML 或数据库查询吗?

成功只表示所选表示形式转换完成。例如,普通字符串引号转义并不能防止 HTML 的 script 结束序列。HTML 应使用上下文相关序列化,SQL 应使用参数化查询,shell 也需要自己的处理方式。

相关工具