字符串字面量转义 / 反转义
文本处理
正在载入
正在加载工具
工具代码会在打开时按需载入,请稍候。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
为代码测试准备一个字符串,或在不执行代码的前提下检查转义字符串实际表示的内容。先选择 JSON、JavaScript 或 Python,再明确引号类型以及完整字面量或仅转义内容模式。转义结果始终为 ASCII;反转义只接受明确限定的语法子集,不是通用程序语言解析器。复制解码文本之前,应先检查 ASCII 预览,尤其注意换行、不可见字符和不完整的 UTF-16 代理项。
常见用途
- 将含双引号、反斜杠和精确 CRLF 换行的文本生成 JSON 字符串值。
- 为 JavaScript 或 Python 测试构造可见的 emoji、分隔符及双向控制字符转义。
- 解码已知日志中的单个字面量或其内容,不运行表达式或导入代码。
使用方法
- 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 使用明确的四位转义。
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 也需要自己的处理方式。