Unicode 规范化 (NFC, NFD, NFKC, NFKD)
文本
同样可见的文本可能以不同的码点序列存储 — é 可以是一个预组合字符(U+00E9),也可以是 'e' 加一个组合重音(U+0065 U+0301)。Unicode 规范化把文本改写为规范形式,使看起来相同的字符串比较相等、排序可预测,并能在文件系统与数据库间往返。NFC 组合为最短的预组合形式(存储与 Web 的最佳默认);NFD 完全分解(macOS 文件名常见);NFKC 与 NFKD 还会应用兼容映射,折叠连字(fi → fi)、全角字符(2024 → 2024)以及罗马数字(Ⅻ → XII)等形式。还可去除组合标记以完全移除重音。对比表显示每种形式的码点与 UTF-8 字节长度,并标出你的输入已匹配哪一种 — 便于发现你以为是 NFC 实则为 NFD 的数据。全部在本地运行;你的文本绝不离开浏览器。
—
规范化输出 · 17 字符 · 32 字节
Café file 2024 Ⅻ ①
输入已是 NFC 形式。
所有形式对比
| 形式 | 字符 | 字节 | = 输入? |
|---|---|---|---|
| NFC | 17 | 32 | 是 |
| NFD | 18 | 33 | 否 |
| NFKC | 20 | 21 | 否 |
| NFKD | 21 | 22 | 否 |
NFC 是存储与 Web 上最安全的默认。NFKC/NFKD 与去除变音符号有损 — 勿用于须保持精确的文本。
使用方法
- 在输入框粘贴或输入文本。
- 选择目标形式(NFC、NFD、NFKC、NFKD)并复制规范化输出。
- 开启「去除变音符号」也可移除重音,并查看表格了解输入已是哪种形式。
常见问题
- 我该用哪种形式?
- NFC 是存储、传输与 Web 上最安全的默认 — 它是最短的规范形式,也是多数系统所期望的。当系统要求分解文本时(如某些 macOS 场景)使用 NFD。仅在你确实想要兼容折叠(连字、全角、上下标折叠)时才用 NFKC/NFKD,因为它们是有损变换。
- 「去除变音符号」做什么?
- 它先分解文本(NFD),移除所有组合标记,再重新规范化为你选择的形式 — 于是 'café' 变成 'cafe','Crème Brûlée' 变成 'Creme Brulee'。这对生成 ASCII 别名或忽略重音的搜索键很有用,但在许多语言中会改变含义,因此不要用于必须保持正确的文本。
- 为何各形式的字节数不同?
- 分解形式(NFD/NFKD)通常使用更多码点 — 预组合的 'é' 在 UTF-8 中是一个 2 字节字符,而 'e' + 组合重音是两个字符共 3 字节。兼容形式则两种皆可能。表格可比较精确的码点与字节长度。
- 规范化可逆吗?
- NFC ↔ NFD 在规范等价性上保留信息且可逆。NFKC/NFKD 不可逆 — 连字或全角数字一旦折叠,原有区别就丢失了。去除变音符号同样是单向的。