文本会依 Unicode 码位切分,而不是 UTF-16 单位,因此 emoji 与增补平面字符不会被切成两半。每个码位对照一份精选的问题字符集比对——零宽与双向格式控制字符、BOM、非 ASCII 空格、C0 与 C1 控制字符,以及模仿拉丁字母的西里尔与希腊字母。整段文本另外检查换行是否混用,以及是否为 NFC 以外的规范化形式。
CSV 导入卡在第一列。粘贴进配置文件的 API key 怎么样都验不过。两组密码看起来一样,其中一组却被拒绝。git diff 把每一行都标成有改动。正则表达式匹配不到明明就在那里的词。这些情况的共同点是——文本不是它看起来的样子,而任何以「看」为前提的工具都帮不上忙。
全程在你的浏览器内执行。粘贴的文本不会送到服务器、不会写进任何存储空间、也不会进入分析事件。这件事在这里特别重要——会被拿来检查的字符串,往往就是 API key、token 与密码。
关于这个主题的常见疑问与实用解答。
把文本粘贴进左边面板。结果区上方的旗标会告诉你找到几类问题,点旗标会跳到第一个出现的位置。下方的逐字符查看把每个可疑码位标成可点的标记,点下去就会说明它是什么、该怎么处理。
它是一个格式控制字符,画出来完全没有宽度,原本的用途是提供断行机会。对人来说它不存在;对程序来说它就是字符串里多出来的一个码位。所以中间夹了零宽空格的电子邮件或 API key,在画面上看起来完全正确,却永远对不上数据库里的值。
实务上反复出现的有五个:U+200B 零宽空格与同族字符、从网页复制带进来的 U+00A0 不换行空格、文件开头的 U+FEFF BOM、中日韩输入法产生的 U+3000 全角空格,以及模仿拉丁字母的西里尔与希腊字母。本工具会逐一标出,另外也标 C0 / C1 控制字符与 thin space 之类的排版空格。
一般空格是 U+0020,也就是你按空格键打出来的那个。不换行空格是 U+00A0——外观相同,但它告诉排版引擎不要在这里断行,最常在复制网页内容时被带进来。全角空格是 U+3000,明显比较宽,由中日韩输入法产生。三者画出来都是空白,但只有 U+0020 会被 ASCII 空格的模式匹配到,所以另外两个会静默弄坏 trim、split 与字段切分。
原因有两个,彼此独立。第一个是其中一段夹了看不见的字符——零宽空格、不换行空格或 BOM。第二个是 Unicode 规范化:字母 é 可以是单一码位(NFC),也可以是字母 e 加上一个组合重音(NFD)。两者画出来一模一样,但序列不同,逐字节比对就会失败。macOS 文件名与部分输入法产出 NFD,所以文本在系统之间搬动时可能静默换了形式。本工具两种原因都会标出。
它检查一组已知会出事的字符——零宽与双向格式控制字符、BOM、非 ASCII 空格、C0 / C1 控制字符,以及西里尔与希腊同形字——再加上整段的换行混用与非 NFC 规范化。它不会改动你的输入、不上传任何内容,也不是完整的 Unicode linter:这份精选集以外的罕见或特定书写系统问题不会被标出。「复制清理后文本」是辅助功能,不是主要结果;主要结果是诊断本身。