从网页、PDF 或 AI 工具复制一段文字,粘贴到 Word 后排版莫名异常; Excel 里的两项内容看起来完全相同,却怎么也去不了重; 在文档里搜索一个明明存在的词,结果却显示“未找到”; 两个用户名肉眼看不出区别,系统却把它们当成两个不同的名字; 一段文字看起来很正常,字数统计却总比预期多几个字符; 已经清除了隐藏字符,文本仍然呈现出明显的模型化表达和统计特征。
很多时候,不是电脑出了错。
前几种情况,往往和文字中间那些肉眼看不见、但真实存在的 Unicode 字符有关。
最后一种情况则不同。它不一定在文本中插入任何特殊字符,而可能体现在模型生成文字时形成的词汇选择和概率分布上。
最近,我把这个问题做成了一个小工具,叫做「净字」。
它最初可以一键清理文本中的零宽字符,并对部分异常的 Unicode 兼容字符进行归一化。现在,我又给它加入了第三种能力:轻度改写。
目前,「净字」提供三层处理:
删除零宽字符; 对 Unicode 兼容异码进行 NFKC 归一化; 在保留原意和关键信息的基础上,对词语和句式进行轻度改写。
前两项基础清理完全在浏览器本地进行;只有你主动点击“轻度改写”时,当前清理结果才会发送到云端模型。
隐私提示:“轻度改写”不是本地功能。点击按钮后,右侧的当前清理结果会上传至 Cloudflare Workers AI 进行处理。合同、客户资料、未公开稿件、个人隐私等敏感内容,请不要使用云端改写;只使用前两项基础清理即可。
在线使用:https://rm.ai.ruixxx.com
一、看起来相同,不代表真的相同
先来看一个简单例子。
下面是两个字符串:
人工智能人工智能肉眼看上去,它们完全一样。
但在计算机里,第二个字符串也可能是这样的:
人[U+200B]工智能方括号里的 U+200B 是为了方便展示而加上的标记。它真正出现在文本中时没有宽度、没有形状,也不会占据一个肉眼可见的位置。
可对计算机来说,它依然是一个真实字符。
如果用 JavaScript 比较这两段文字:
const first = '人工智能';const second = '人\u200B工智能';console.log(first === second); // false结果是 false。
因为第一段文字有 4 个字符,第二段文字中间还藏着一个 U+200B。人眼忽略了它,计算机却不会。
这就是很多“看起来一样,处理结果却不一样”的来源之一。
二、什么是零宽字符?
零宽字符是一类通常不显示宽度的 Unicode 字符。
它们并不是凭空出现的“黑科技”,最初也不是专门为了添加水印而设计。有些零宽字符承担着正常的排版、连接或编码功能,在特定语言和表情符号中甚至不可缺少。
但在网页复制、富文本编辑、格式转换、自动排版或某些文本标记过程中,它们也可能被带进普通中文和英文文本。
常见的几种包括:
U+200B:零宽空格,英文名为 Zero Width Space;U+200C:零宽非连接符,英文名为 Zero Width Non-Joiner;U+200D:零宽连接符,英文名为 Zero Width Joiner;U+FEFF:零宽不换行空格,也常与字节顺序标记 BOM 有关。
因为它们肉眼不可见,所以排查起来比较麻烦。
你看到的是一句正常的话,程序看到的却是一串包含额外编码的字符序列。
三、它们会造成什么问题?
1. 搜索不到明明存在的文字
假设正文里保存的是:
人工[U+200B]智能你搜索“人工智能”时,一些使用精确匹配的程序可能无法找到它,因为正文中间实际多了一个字符。
2. Excel 去重或数据匹配失败
两行名称看起来一样,其中一行却包含零宽字符。执行去重、查找或数据关联时,它们就可能被识别为两个不同的值。
3. 程序判断两个字符串不相等
登录名、标签、文件名或数据库字段中只要多了一个不可见字符,严格比较的结果就会不同。这类问题仅靠肉眼检查通常很难发现。
4. 字数和长度统计异常
有些软件会把不可见字符计入字符串长度。因此,一段看起来只有 100 个字的文字,程序统计出来可能是 103 个字符。
5. 复制到其他编辑器后格式异常
不同软件对 Unicode 控制字符的处理方式并不完全相同。同一段文本复制到 Word、网页编辑器、代码编辑器或内容管理系统后,可能出现光标移动异常、断行奇怪或者排版不一致。
这些问题并不一定都由零宽字符造成,但当你遇到“肉眼正常、程序异常”的文本问题时,检查隐藏字符通常是一个很有效的排查方向。
四、网上说的“AI 文字水印”,其实不止一种
这两年,网上经常有人把文本中的零宽字符、异体字符、特殊 Unicode 编码乃至较高的 AI 检测概率,统称为“AI 文字水印”。
这个说法很容易传播,但并不十分严谨。
这些概念经常被混在一起,但它们背后的原理并不相同。大致可以分成三类。
1. 字符级隐藏标记
最直观的一类,是在正常文字之间插入零宽字符或其他不可见字符。
它们确实存在于字符串中,可以被程序定位和删除。「净字」的第一项能力就是处理这一类字符。
但要注意:文本中存在零宽字符,不代表这段文字一定由 AI 生成。
它们可能来自:
网页和富文本编辑器; PDF、Word 与其他格式之间的转换; 输入法或操作系统的文字处理; 多语言排版; 表情符号的组合; 内容平台添加的技术标记; 人工或程序主动插入的不可见信息。
反过来,一段 AI 生成的文字也不一定包含任何零宽字符。
2. Unicode 兼容异码
第二类,是使用全角字母、圈号字符、兼容连字或其他不常见的 Unicode 表示形式。
这类字符通常肉眼可见,却可能和常用字符具有不同的底层编码。「净字」通过 NFKC 兼容归一化处理其中一部分情况。
3. LLM 概率型水印或统计特征
第三类更加隐蔽,也更容易和普通的“AI 检测”混淆。
大语言模型每生成一个词,都不是从唯一答案中直接取出文字,而是根据上下文,在一组候选词中按概率继续生成。
一些概率型水印方法会在生成过程中,按照特定规则轻微提高某些候选词的选中概率。单独看每一个词都很自然,但当文本足够长时,检测器可能从整体词汇分布中发现统计偏差。
这种水印通常不会插入 U+200B 一类特殊字符。因此,单纯删除零宽字符或执行 Unicode 归一化,并不能改变它的核心统计信号。
与此同时,很多市面上的“AI 率检测”并不是真正在读取某种水印密钥,而是在根据句式规律、词汇分布、困惑度等特征估算文本像不像模型生成。
所以必须区分两件事:
概率型水印检测:寻找生成过程中人为加入的统计偏差; AI 文本分类检测:根据文本特征给出一个推测性的概率或标签。
它们都可能受改写影响,但不是同一种技术,也都不能仅凭一次检测结果准确证明文本来源。
因此,零宽字符不能被当成可靠的“AI 鉴定证据”,删除它们也不等于删除了所有所谓的“AI 痕迹”。同样,检测工具给出的百分比,也不等于在文本中发现了一个可以直接删除的实体水印。
「净字」现在处理的是三个具体问题:
清理指定的零宽字符,归一化一部分 Unicode 兼容字符,并通过可选的轻度改写调整文本表达和词汇分布。
它不是 AI 内容检测器,轻度改写也不承诺让文本通过某一个特定检测器。
我更愿意把它称作一个文本清洁、表达优化和故障排查工具。
五、除了隐藏字符,还有“看起来不太对”的异码
有时问题不在于字符完全不可见,而在于它使用了另一种 Unicode 表示形式。
例如:
AIAI第一行使用的是全角字母,第二行使用的是常见的半角拉丁字母。它们看起来相近,但底层编码不同。
类似的例子还有:
① → 1fl → flA → AUnicode 提供了一种叫做 NFKC 的兼容归一化方式,可以把部分兼容形式转换成更常见的标准形式。
「净字」也提供了这个选项。
不过,兼容归一化并不是简单的“删除乱码”,它可能改变某些字符原本的表现形式和语义。例如圈号数字 ① 会变成普通数字 1。
所以工具把“删除零宽字符”和“兼容异码归一化”设计成了两个独立开关。你可以根据文本用途决定是否启用。
六、第三种能力:用轻度改写调整统计分布
先强调一个重要区别:轻度改写需要调用云端 AI 模型,不是在浏览器本地完成。
只有用户主动点击“轻度改写”按钮时,工具才会把右侧的当前清理结果发送至 Cloudflare Workers AI。没有点击按钮时,粘贴、零宽字符清理、NFKC 归一化、复制和下载都不会因为这项功能自动上传文本。
如果零宽字符和 Unicode 异码属于“字符层”的问题,那么概率型水印和 AI 文本统计特征就更接近“表达层”的问题。
它们的信号可能来自:
某些词汇出现得比自然状态更频繁; 句式和连接方式过于规律; 连续多个词的选择符合某种统计偏好; 整篇文章的节奏、长度和表达变化不足。
要改变这些特征,通常不能只做字符替换,而需要重新组织语言。
常见方法包括:
使用另一个模型进行同义改写,也就是 Paraphrase; 替换部分表达,同时调整主动句、被动句和长短句结构; 在不改变事实的前提下重新组织段落和信息顺序; 使用“交叉翻译”,例如中文翻译成英文后再翻译回中文。
这些方法的共同点,是对原有词汇选择和句式结构进行重新采样。改写后的文本不再完全保留原来的生成路径,因此可能削弱原本建立在词汇概率上的统计信号,也可能改变普通 AI 分类器的评分。
这就是「净字」加入“轻度改写”的原因。
点击之后,工具会让云端模型在保留原意、事实、观点、语气和关键信息的前提下,适度替换表达并调整部分句式,同时尽量保留:
数字、日期、金额和比例; 人名、地名和机构名; 专业术语、网址、代码和引用; 原有段落、列表和 Markdown 格式。
「净字」目前采用的是直接同义改写,不是交叉翻译。相比大幅重写,它更适合已经完成内容审核、只希望让表达自然一些的文本。
不过,“可能削弱”不等于“保证清除”。实际效果会受到水印算法、检测器规则、文本长度、改写幅度和语言类型影响。有些设计更强的水印可能在多次改写后仍保留部分信号,而短文本的检测结果本身也可能非常不稳定。
所以更准确的说法是:
轻度改写会重新组织部分词汇和句式,从而改变原有统计分布,并可能降低某些概率型水印或 AI 文本特征的可检测性,但不保证满足任何特定检测工具的判定标准。
七、我做了一个免费工具:净字
为了让这类问题更容易发现和处理,我做了「净字」这个小工具。
它目前支持:
删除 U+200B、U+200C、U+200D和U+FEFF;使用 Unicode NFKC 进行兼容形式归一化; 实时显示移除了多少个隐藏字符; 一键复制清理结果; 导入和下载 TXT 文本文件; 单独开启或关闭两类处理; 可选使用云端模型进行轻度改写,调整部分词语和句式; 直接在手机和电脑浏览器中使用。
使用方法很简单:
打开「净字」; 把需要检查的内容粘贴到左侧输入框; 右侧会立即显示清理结果; 查看移除数量,确认无误后复制或下载; 如果还需要调整表达和统计特征,可以主动点击“轻度改写”。
点击前请确认:轻度改写会把当前清理结果上传至 Cloudflare Workers AI,每次最多支持 5000 个 Unicode 字符。如果内容敏感,请不要点击该按钮。
模型处理具有不确定性,完成后请重点复核人名、数字、专业术语、引用和事实信息。
在线地址:
https://rm.ai.ruixxx.com
无需注册,也不需要下载安装软件。
八、为什么我特别强调“基础清理不上传”?
文字清理工具经常会被用来处理合同、工作文档、未发布的文章、代码、客户资料或者聊天记录。
如果为了清理几个隐藏字符,就要把完整内容发送到陌生服务器,这件事本身可能带来新的隐私风险。
所以「净字」的基础清理采用纯浏览器本地处理:
你粘贴的原文、清理后的结果以及导入的 TXT 文件,都只在当前浏览器标签页中处理。
删除零宽字符和兼容归一化不需要把文本发送到服务器。下载清理结果同样在本地完成。
只有你主动点击“轻度改写”时,当前清理结果才会上传到 Cloudflare Workers AI;界面会在按钮旁明确标注“云端”和 5000 字限制。如果文本涉及合同、客户资料、未公开信息、个人隐私或其他敏感内容,请不要使用轻度改写,只使用本地基础清理。
清理逻辑同时公开在 GitHub 上,熟悉代码的朋友可以直接检查实现,也可以自己部署一份。
项目地址:
https://github.com/ruixx-tech/Remove-the-AI-watermark
对我来说,“基础清理不上传”不应该只是一句宣传语,而应该是可以从产品设计和代码中验证的事实。可选的云端功能也应该明确告知用户数据将去往哪里,而不是模糊两种处理方式的隐私边界。
九、使用之前,请留意这几个边界
为了避免误解,有几件事必须说在前面。
1. 零宽字符不一定是水印
发现零宽字符,只能说明文本中包含对应的 Unicode 字符,不能据此判断作者是谁,也不能据此判断内容是否由 AI 生成。
2. 零宽字符并非永远无意义
U+200C 和 U+200D 在部分语言文字和组合表情中有正常用途。删除它们可能改变排版、连接形式或者表情显示。
如果你处理的是多语言文本、Emoji 或对字符精确性要求很高的内容,建议保留原文,并在处理后认真比对。
3. NFKC 会改变部分字符形式
全角字母、圈号数字和兼容连字等字符可能在归一化后发生变化。如果原本的字符形式具有特殊含义,可以关闭“兼容异码归一化”。
4. 工具不会替换所有视觉相似字符
有些字符来自不同文字系统,虽然长得很像,却具有不同含义。例如西里尔字母和拉丁字母中就存在一些视觉相似的字符。
「净字」不会仅凭“长得像”就强制替换它们,以免误伤正常的多语言内容。
5. 轻度改写不是确定性的“水印擦除”
改写可以改变词汇选择、句式结构和整体统计分布,但实际效果取决于具体的水印方法和检测器。工具不保证将某个检测分数降到指定范围,也不保证通过任何平台的自动审核。
同时,检测分数降低不能证明文字变成了“人工原创”,检测分数较高也不能反向证明作者使用了 AI。判断文本来源时,写作过程、引用记录、版本历史和事实核验通常比单一检测分数更可靠。
6. 模型改写之后必须复核
虽然提示词要求保留原意和关键信息,但任何模型都可能误改数字、专有名词、引用关系或语气。用于公开发布、工作交付或专业场景前,请由作者完成最终审核,并确保自己有权处理和使用相关内容。
工具应该帮助人减少重复劳动,但不能替代必要的人工检查。
十、也许你不常需要它,但需要时会很省事
「净字」不是一个复杂的大产品。
它解决的是一个很小、很具体,却又经常让人摸不着头脑的问题:
先清理藏在字符之间的异常编码,再按需调整词汇和句式,让文本在技术层面更规范,在表达层面更自然。
如果你是编辑、自媒体作者、办公人员、程序员,或者经常需要在不同软件之间复制文字,可以先把它收藏起来。
下次遇到这些情况时,也许就能少排查半个小时:
搜索不到明明存在的内容; Excel 数据无法正常去重; 两个字符串比较结果不一致; 从网页或文档复制后格式异常; 怀疑文本中混入了不可见字符; 需要在保留原意的基础上,对一段文字做轻度润色和句式调整。
在线使用:https://rm.ai.ruixxx.com
开源代码:https://github.com/ruixx-tech/Remove-the-AI-watermark
如果这个工具对你有帮助,欢迎把它转发给经常处理文字、表格和代码的朋友。
也欢迎告诉我:你曾经遇到过哪些看起来正常、实际上却有问题的文字?
这些真实案例,也会帮助我继续改进它。
夜雨聆风