AI 水印检测
把聊天窗口、文档或网页里复制出来的文字贴进来。这个工具会找出零宽空格、U+202F 窄空格、弯引号和其他不可见 Unicode,再让你复制干净的纯文本。免费,在浏览器里完成,文字不会上传。
- 免费,无需注册
- 文字留在这个标签页
- 页面打开后即可检查
这些是排版和格式字符,不是加密水印。清掉它们不会让一篇文字变成「检测不出来」,也不能去掉 SynthID-Text 这类藏在用词里的统计水印。
清理哪些字符
emoji 序列会保留。处理法语时关掉「规范特殊空格」;处理阿拉伯语、希伯来语、波斯语或印地语时关掉「删除不可见字符」。
待检查文本
粘贴文字后即可检查。
清理后的文本
怎么检查文字里的隐藏字符
报告会随着粘贴更新。文字不会发到服务器。
1
粘贴文本
从聊天窗口、Word、公众号后台或代码文件复制过来。示例里带了零宽空格、窄空格、弯引号、软连字符和 emoji,可以先看报告再贴自己的文字。
2
看检查结果
隐藏字符按种类计数,名字旁边是 Unicode 码位。打开「显示隐藏字符」,看不见或容易认错的字符会变成一个标签。引号和破折号单独列出,因为它们本来就能看见。
3
复制纯文本
右边是清理后的版本,可以复制,也可以下载 .txt。想保留某一类字符时,先把对应开关关掉,例如法语窄空格、你确实想留的破折号,或还要渲染的 Markdown。
为什么复制出来的文字会带上隐藏字符
2025 年 4 月,有人在 ChatGPT o3 和 o4-mini 的长回答里看到大量窄不换行空格(U+202F)。这个字符看起来就是普通空格。消息很快被叫成「ChatGPT 水印」。OpenAI 的说法是训练副作用,不是他们故意埋的标记,这种分布随后也从输出里消失了。搜索还在,是因为真正麻烦的事比这则消息更早。
从聊天窗口、Word 或网页复制出来的文字,经常带着作者没打算输入的字符:弯引号、破折号、不换行空格、Markdown 星号,偶尔还有真正看不见的 Unicode,比如零宽空格、连接符、字节顺序标记和方向覆盖符。这些都不是加密水印。字符检查能把它们找出来。其中一部分还会让代码、表格、查找替换和内容系统出现看起来像「文件中邪了」的错误。
2026 年 8 月 2 日起,欧盟《人工智能法案》第 50 条要求生成式系统的提供者,以机器可读的方式标注合成内容。各家产品最终用什么标记先不说,已经有人把草稿贴进检查工具,想知道剪贴板里到底有什么。字符检查回答的是剪贴板这个问题。它看不到 Google SynthID-Text 那种藏在用词里的统计水印,也不能把一段话改写到让文风检测器改口。
这个边界就是工具本身。页面列出每一种特殊字符,标出看不见的那些在哪里,然后还给你纯文本。句子还是原来的句子。每一组规则都能关掉,所以法语草稿可以留下窄空格,中文可以留下全角空格,双向文本可以留下方向标记。
这个工具会检查哪些字符
下面这张表就是清理程序实际使用的清单。表里有的字符,检查时就会找。文本框上方的开关按组打开或关闭。换行符始终会规范成普通换行。
| 码位 | 名称 | 清理方式 | 由哪个开关控制 | 为什么重要 |
|---|---|---|---|---|
U+200B | 零宽空格 | 删除 | 删除不可见字符 | 不占宽度,可以插在一个看起来完整的词中间,搜索和变量名都会对不上。 |
U+200C | 零宽非连接符 | 删除 | 删除不可见字符 | 英文里看不见。波斯语和印地语里它有实际作用,处理这些语言时请关掉「删除不可见字符」。 |
U+200D | 零宽连接符 | 删除 | 删除不可见字符 | 用来把多个 emoji 拼成一个。emoji 内部的连接符会保留,普通文字里的会被删掉。 |
U+2060 | 单词连接符 | 删除 | 删除不可见字符 | 看不见的禁断标记,不显示空格,但会阻止在这里换行。 |
U+FEFF | 字节顺序标记 | 删除 | 删除不可见字符 | 有些编辑器会在文件开头塞进这个隐藏标记。出现在正文中间时,解析器会报错。 |
U+00AD | 软连字符 | 删除 | 删除不可见字符 | 平时看不见,只有在它这里换行时才显示成连字符。 |
U+034F | 组合字素连接符 | 删除 | 删除不可见字符 | 几乎不会出现在正常句子里的不可见控制符。 |
U+200E, U+200F, U+061C, U+202A–U+202E, U+2066–U+2069 | 方向标记与覆盖 | 删除 | 删除不可见字符 | 可以让字符的视觉顺序和存储顺序不一致。阿拉伯语、希伯来语需要它,它也是 Trojan Source 攻击用的字符。处理真正的双向文本时请关掉。 |
U+180B–U+180E | 蒙古文分隔符 | 删除 | 删除不可见字符 | 蒙古文变体选择符和元音分隔符。在中文或英文里不会显示。 |
U+2061–U+2064 | 不可见数学运算符 | 删除 | 删除不可见字符 | 数学排版留下的不可见乘号、加号、分隔符和应用符。 |
U+206A–U+206F | 已弃用的塑形控制符 | 删除 | 删除不可见字符 | 早期阿拉伯文塑形用的控制符,现在的文本不需要。 |
U+115F, U+1160, U+3164, U+FFA0 | 韩文填充符 | 删除 | 删除不可见字符 | 显示成空白,常被拿来伪造一个看起来是空的字符串。 |
U+17B4, U+17B5 | 高棉文固有元音 | 删除 | 删除不可见字符 | 已弃用的高棉文元音符号,不占可见位置。 |
U+FFF9–U+FFFC | 注释与对象标记 | 删除 | 删除不可见字符 | 行间注释控制符,以及对象替换字符。 |
U+FE00–U+FE0F | 变体选择符 | 删除 | 删除不可见字符 | 在文字样式和 emoji 样式之间切换,本身不显示。emoji 内部的选择符会保留。 |
U+E0100–U+E01EF | 表意文字变体选择符 | 删除 | 删除不可见字符 | 用来指定汉字的某个字形。紧跟在汉字后面时保留,单独出现时删除。 |
U+E0000–U+E007F | 不可见标签字符 | 删除 | 删除不可见字符 | 一整套看不见的字母,可以把一段读者看不到的文字藏进正文。 |
U+0000–U+0008, U+000B, U+000C, U+000E–U+001F, U+007F, U+0080–U+0084, U+0086–U+009F | 控制字符 | 删除 | 删除不可见字符 | 除制表符和换行以外的 C0/C1 控制符,粘贴来的正文里不该有。 |
U+202F | 窄不换行空格 | 换成普通空格 | 规范特殊空格 | U+202F。2025 年 4 月被很多人称作 ChatGPT 水印的就是它。法语在 ; : ! ? % 前面也会正规使用。 |
U+00A0 | 不换行空格 | 换成普通空格 | 规范特殊空格 | 看起来是空格,但不会在这里换行。从网页或 Word 复制的文字里非常常见。 |
U+2000–U+200A | 排版空格 | 换成普通空格 | 规范特殊空格 | U+2000 到 U+200A,包括 en、em、细空格、发丝空格等不同宽度。 |
U+205F | 中等数学空格 | 换成普通空格 | 规范特殊空格 | 数学排版留下的空格,很容易当成普通空格。 |
U+1680 | 欧甘文空格 | 换成普通空格 | 规范特殊空格 | 古爱尔兰欧甘文的空格,有些字体把它画成一条短线。 |
U+3000 | 表意文字空格 | 换成普通空格 | 规范特殊空格 | U+3000,中文、日文、韩文里的全角空格。想保留它时,请关掉「规范特殊空格」。 |
U+2800 | 盲文空位 | 换成普通空格 | 规范特殊空格 | 空的盲文点位。看起来像空格,只检查普通空格的过滤器会漏掉它。 |
U+000D | 回车符 | 规范为换行 | 始终处理 | Windows 换行 CRLF 里的那一半,会和后面的换行合并成一个换行。 |
U+0085 | 下一行 | 规范为换行 | 始终处理 | U+0085,早期大型机使用的换行符。 |
U+2028, U+2029 | 行分隔符与段分隔符 | 规范为换行 | 始终处理 | U+2028 和 U+2029。放进 JavaScript 字符串或某些 JSON 解析器会直接出错。 |
U+201C, U+201D, U+201E, U+00AB, U+00BB, U+2033 | 弯双引号 | 换成直双引号 | 弯引号改成直引号 | 弯引号、低位引号和书名号式引号,换成直引号。 |
U+2018, U+2019, U+201A, U+2039, U+203A, U+2032 | 弯单引号 | 换成直撇号 | 弯引号改成直引号 | 弯撇号和撇号式素数,换成直撇号。 |
U+2010, U+2011, U+2012, U+2013, U+2014, U+2015, U+2212 | 长破折号与短破折号 | 换成连字符 | 破折号改成连字符 | 长破折号、短破折号、减号和不换行连字符,统一成半角连字符。破折号是写法选择,不能拿来证明文字是 AI 写的。 |
U+2026 | 省略号 | 换成三个句点 | 省略号改成三个句点 | 把一个省略号字符换成三个句点。 |
- U+202F 在法语里是 ; : ! ? % 前面的正规空格。如果文本是法语,请取消「规范特殊空格」。
- 方向标记在阿拉伯语和希伯来语里是正常字符,同时也是 Trojan Source 攻击使用的字符。处理真正的双向文本时,请取消「删除不可见字符」。
- U+3000 是中文、日文、韩文的全角空格。U+200C 零宽非连接符在波斯语和印地语里有意义。两者都可以通过上面的开关保留。
- emoji 默认保护。属于 emoji 的连接符和变体选择符,包括家庭组合和肤色,不会被删除。同样的字符出现在普通文字里时会被删除。
这个工具能做什么
边贴边出报告
输入时就按字符种类计数,名字旁边带 Unicode 码位。
一键得到纯文本
不可见字符删除,特殊空格换成普通空格,弯引号换成直引号。不会改写你的句子。
留在这个标签页
检查和清理都在浏览器里进行。你粘贴的文字不会上传到原牛。
emoji 保持完整
家庭 emoji、肤色和 emoji 内部的变体选择符会留下。普通文字里单独出现的连接符仍会删除。
什么时候会用到
从聊天窗口贴出来的草稿
把模型草稿贴进公众号、邮件或文档之前,先去掉那些看不见的残留。
代码和配置解析失败
标识符里的零宽空格、配置文件开头的字节顺序标记、命令里的不换行空格。看起来没错,工具却不认。
表格去重对不上
两个看起来一样的单元格,一个里面是 U+00A0 或 U+202F,相等比较就会失败。
法语、阿拉伯语和中文
同一类字符在有些语言里是正确排版。开关可以只清理英文草稿,而不压平法语空格、全角空格或双向文本。
常见问题
AI 水印检测在找什么?
大家说的 AI 水印检测,找的是从聊天机器人和文字软件复制出来的隐藏字符和特殊字符:零宽空格、窄不换行空格 U+202F、不换行空格、弯引号、破折号,以及其他不可见 Unicode。这个页面在浏览器里做这件事,也可以把它们清掉。它不能发现藏在用词里的统计水印。
ChatGPT 真的用隐藏空格给文字加水印了吗?
2025 年 4 月,有人在 o3 和 o4-mini 的回答里发现大量窄不换行空格(U+202F),这个字符被广泛叫成水印。OpenAI 说那是训练副作用,不是水印,这种分布随后也消失了。现在仍然成立的是更普通的事:复制出来的文字经常带弯引号、破折号、奇怪的空格,有时还有不可见 Unicode。这个工具把这些字符显示出来。它不能证明这段话是模型写的。
清理会改我的措辞吗?
不会。清理不会改写、缩写或「人性化」草稿。它删除不可见字符,把特殊空格换成普通空格,在对应开关打开时把引号和破折号拉直,也可以去掉 Markdown 标记。每条规则都能关掉,复制之前报告会列出找到了什么。
我粘贴的文字会被上传吗?
不会。检查和清理都在你的浏览器标签页里进行。原牛不会收到你粘贴的文字,也不需要账号。页面仍可能加载本站常规的广告和分析脚本;这些脚本拿不到文本框里的内容。
清掉之后,AI 写的文字就能通过检测器了吗?
不能。删掉隐藏字符,既骗不过按文风打分的检测器,也去不掉 SynthID-Text 这类统计水印。字符清理做不到这两件事。
破折号能不能证明这段文字是生成的?
不能。破折号是正常标点,模型输出里也常见,所以有的编辑会把它当成一个提示。如果你想要连字符,可以打开破折号开关。关掉这个开关,破折号会保留。
为什么看不见的字符会让代码、表格和后台出错?
名字里的零宽空格、文件开头的字节顺序标记、命令里的不换行空格,看起来和你期望的字符一样,比较时却是另一个值。编译器、搜索、去重和数据库就会以很难用眼睛发现的方式失败。把粘贴的内容清一遍,能修掉这一类问题,和文字从哪来无关。
哪些字符可以保留?
关掉「规范特殊空格」,可以留下 U+202F(包括法语空格)和中文全角空格 U+3000。关掉「删除不可见字符」,可以留下阿拉伯语或希伯来语的方向标记,以及波斯语和印地语使用的零宽非连接符。emoji 默认保留。本页的表格就是检查器使用的完整清单。