首页 > 工具箱 > 零宽字符隐写

零宽字符隐写

零宽字符是一批宽度为零、屏幕上完全看不见的 Unicode 字符。把秘密信息编码成这些字符插进一段正常文字里,肉眼看上去毫无变化,复制粘贴还能带着走——常被用来给文档加隐形水印、追踪内容是从谁那里流出去的。这页既能藏,也能查和清。全部在你的浏览器里完成。

常见零宽与不可见字符

码点名称转义写法正常用途 / 风险
U+200BZWSP 零宽空格\u200B给长单词提供换行点。最常被拿来做隐写载体。
U+200CZWNJ 零宽不连字\u200C阿拉伯语、波斯语里阻止字母连写。本页用它表示二进制 0。
U+200DZWJ 零宽连字\u200Demoji 组合(👨‍👩‍👧 就是用它连起来的)。本页用它表示二进制 1。
U+2060WJ 单词连接符\u2060禁止在此处断行,不产生空格。
U+FEFFZWNBSP / BOM\uFEFF文件头的字节序标记。出现在文件中间往往是编辑器留下的垃圾,会让 JSON 解析失败。
U+00AD软连字符\u00AD只在断行时才显示的连字符,平时不可见。
U+180E蒙古文元音分隔符\u180EUnicode 6.3 后归为格式字符,宽度为零。
U+2061U+2064数学不可见运算符\u2061排版数学公式用,正文里出现即异常。

用法说明

编码方式
秘密文本先按 UTF-8 转成字节,每个字节拆成 8 位二进制,0 用 U+200C、1 用 U+200D 表示,末尾用 U+200B 作结束标记。选「4 字符」时改用四个零宽字符各表示 2 个二进制位,隐写串长度减半,但个别编辑器对 U+FEFF 处理不一致,兼容性略差。
什么地方会失效
零宽字符本质上还是字符,会被这些环节吃掉:微信、钉钉等 IM 的部分输入框会过滤;数据库字段做了 TRIM 或字符白名单;文本经过「复制为纯文本」以外的再排版;粘进代码编辑器时被 lint 规则自动清理。所以它适合做追踪水印,不适合当可靠的传输通道,更不能当加密用——任何人拿这页都能读出来。
「均匀打散」是干什么的
默认把整串零宽字符堆在一起,对方只要删掉末尾就全没了。选打散后会把它们按字符间隔分散到载体全文,即使被截掉一段,剩下的部分仍可能解出前半截内容。代价是载体文本被切碎,某些富文本编辑器会在这些位置插进多余标签。
怎么防别人给你夹带
从网页、文档复制大段文字到自己的系统前,用「检测与清除」过一遍。日常还可以在入库前统一用正则 /[\u200B-\u200F\u2060-\u2064\uFEFF\u00AD\u180E]/g 清一次——注意别把 U+200D 一刀切,emoji 组合要靠它,清理用户昵称时尤其容易把 👨‍👩‍👧 拆成三个人。
相关工具
Unicode 转换特殊符号大全Emoji 大全文本批量替换
已复制