首页/开发/正则与编码速查/JSON 中的 Unicode 转义写法

JSON 中的 Unicode 转义写法

JSON 的 \uXXXX 转义表示 UTF-16 码元,非 BMP 字符需用高位与低位两个代理对书写;JSON 本身允许 UTF-8 原文字符,转义主要服务于纯 ASCII 通道;孤立代理在语法层合法但行为不可预测,应视为脏数据。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

\uXXXX 是码元不是码点

JSON 的 \u 转义后固定跟 4 位十六进制,它表示的是一个 UTF-16 码元,而不是一个 Unicode 码点。基本多文种平面(U+0000 到 U+FFFF)里两者一一对应;超出该平面的字符必须拆成高位代理加低位代理两个 \u 转义。理解这一点,才能解释为什么同一个 emoji 会写成两段转义。

基本信息

写法\uXXXX,X 为十六进制数字,大小写均可,务必补齐 4 位
高位代理U+D800 到 U+DBFF
低位代理U+DC00 到 U+DFFF
码点换算码点 = 0x10000 + (高位 - 0xD800) × 0x400 + (低位 - 0xDC00)
是否必需不必须。JSON 允许 UTF-8 原文字符,\u 转义主要用于 ASCII 安全通道

典型使用场景

  • 接口要求纯 ASCII 请求体,中文与 emoji 必须转义后传输
  • 把 JSON 嵌进 HTML 脚本或 HTTP 头,避免非 ASCII 字节被中间层改写
  • 排查前端显示乱码:确认代理对是否被截断成单个 \u 转义
  • 生成测试数据:用转义形式精确控制字符,避免编辑器插入不可见字符
  • 跨语言对拍:Python、Java、JS 对同一字符串的转义输出应一致

生成与还原

生成与还原
# 生成:非 ASCII 全部转义(非 BMP 自动写成代理对)
json.dumps('中文😀', ensure_ascii=True)   # '\u4e2d\u6587\ud83d\ude00'
# 还原:解析器自动合并代理对
json.loads('"\\ud83d\\ude00"')          # '😀'
# 手工换算码点(验证转义是否正确)
cp = 0x10000 + (0xD83D - 0xD800) * 0x400 + (0xDE00 - 0xDC00)
hex(cp)  # 0x1f600
chr(cp)  # 😀

常见字符的两种写法

字符原文字符\u 转义
中中\u4e2d
AA\u0041(可省)
换行\n\u000a(可用 \n)
笑脸😀\ud83d\ude00
不换行空格U+00A0\u00a0
JSON 语法允许出现孤立代理(不成对的高位或低位),但 RFC 8259 明确指出收到这类文本的软件行为不可预测。遇到半个代理对应当判定为脏数据,而不是当成正常字符继续处理。
转义只改变表示,不改变语义:\u4e2d 与原文字符「中」在解析后完全等价。因此字符串比较、长度统计应在解析后进行,比较原始文本里有没有转义是没意义的。

易错点

  • 用正则把 \u 转义当普通文本处理:\ud83d\ude00 属于一个字符,按字符切分会产生半个代理对
  • 只写 4 位以外的十六进制(如 \u1F600)会解析成别的字符或直接报错,非 BMP 必须写代理对
  • 在非 UTF-8 管道里传递原文中文,中间环节按本地编码重编码导致乱码,此时应主动转义成纯 ASCII
  • 把转义当加密:\u 转义只是可读性差,任何人都能一眼还原,不可用于隐藏敏感数据
  • 在 JavaScript 里用 '\u{1F600}' 这类 ES6 写法生成 JSON,JSON 解析器不认,会抛语法错误

数据来源与参考

  • RFC 8259 第 7 节与第 8.2 节:字符串转义与不可预测行为
  • ECMA-404:JSON 数据交换格式
  • Unicode 标准:UTF-16 代理对与码点换算

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/json-unicode-escape.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​