一句话定义:零宽字符(Zero-width Character)是 Unicode 里一类“占编码位置、不占显示宽度”的字符——肉眼看不到字形,但复制、传输、解析时都真实存在。
常见的有零宽空格(U+200B)、零宽非连接符(U+200C)、零宽连接符(U+200D)、零宽不换行空格(U+FEFF)等。它们原本有正当用途,比如控制排版断行、组合表情符号、防止长串文本自动换行。零宽字符属于 Unicode 的格式字符(format character),不是“乱码”,而是合法的字符。
打个比方:你在纸上写“明天下午三点开会”,纸面清清楚楚;但有人在纸背用针尖扎了一排小孔,人眼看不见,拿放大镜的机器却能读出“改到四点”。零宽字符就是文本里的针孔:它不改变你看到的句子,却在字符序列里多出了可编码的信息。把“有零宽字符=1、没有=0”排一排,就能塞进一段二进制;用几种不同的零宽字符组合,也能映射成字母或指令。对人和普通文本审查来说,屏幕上就是一段正常文字;对按字符处理的程序和大模型来说,这是一串额外的词元(token)。
和相邻概念的区别:
| 概念 | 肉眼是否可见 | 复制到纯文本是否还在 | 主要风险 |
|---|---|---|---|
| 零宽字符 | 不可见 | 在 | 夹带编码信息、绕过关键词审查 |
| 白色字体/极小字号 | 看不见但可选中 | 通常还在,但会暴露格式 | 依赖渲染样式,易被检查 |
| 同形异码字(Homoglyph) | 看起来像正常字 | 在 | 冒充域名、绕过匹配 |
同形异码字是“长得像”,零宽字符是“根本不占位置”;白色字体是“藏起来”,零宽字符是“混在字符流里”。三者经常被组合使用。
对从业者和普通人的意义:做 AI 应用时,网页抓取、简历解析、邮件入模、AI 词典:检索增强生成">检索增强生成(RAG)都应该先做不可见字符检测和清洗,再谈内容安全;只做关键词过滤,容易被零宽字符拆开的词绕过。常规的 Unicode 规范化不一定能清掉全部零宽字符,需要显式过滤或转义。普通职场人收到来历不明的复制文本,可以用编辑器打开“显示不可见字符”看一眼;对系统来说,最稳妥的是在输入入口统一处理,而不是指望人工复核。具体支持哪些字符、怎么处理,以所用工具和平台的官方说明为准。
