跳到正文

Unicode 规范化

Unicode Normaliser

套用 NFC、NFD、NFKC 或 NFKD——NFKC 顺带把全角字母数字折成半角,NFC 则是 macOS 来的韩文看着一样却怎么都搜不到时的解法。

在四种 Unicode 规范化形式之间转换文本,并以码点和字节显示每一种改变了什么。实际会碰到的情况是韩文:在 Mac 上输入的名字以分解形式存储,和在 Windows 上输入的同一个名字比较不相等,所以搜索或 VLOOKUP 什么都找不到。汉字没有分解形式,NFC 和 NFD 都不会动它;对中文文本,会改变东西的是 NFKC,它把全角字母和数字折成半角。

🔒 完全在你的浏览器里运行unicodenormalizenfckorean

原文

形式

已组合。网页、Windows 和几乎所有数据库都指望这个形式。从这里开始。

不会离开这个标签页。每敲一个键就重新正规化,四个形式一起算出来,方便对照。

这段文本里有 6个散开的谚文字母。

这就是 macOS 的文件名形式。屏幕上看着是正常的韩文,可是和在 Windows 上敲出来的同一段文字比较起来并不相等,所以检索或 VLOOKUP 什么都找不到。NFC 会把音节重新拼回去。

NFC 结果

四个形式对照

形式是否改动码位UTF-8 字节能否还原
NFC是 — 从第0个码位起2246是
NFD是 — 从第7个码位起3789是
NFKC是 — 从第0个码位起2444否
NFKD是 — 从第7个码位起4090否

真正要紧的是字节这一列:分解的韩文每个音节要 9 个 UTF-8 字节,组合的只要 3 个。同一个名字在一台机器上过得了长度检查,在另一台上过不了,原因就在这里。

NFC 改动了什么

  • 第0个한글한글码位 6 → 2

怎么用

  1. 粘贴匹配不上的文本

    如果里面有拆开的韩文字母,在你做任何别的事之前,警告会连同数量一起出现。这个警告只统计韩文字母,中文文本不会触发它。

  2. 没有特别理由就用 NFC

    NFC 是网页、Windows 和所有数据库期望的合成形式。NFD 是 macOS 存储文件名的形式。NFKC 是搜索键,不是显示文本。

  3. 决定之前比较全部四种

    表格显示哪些形式会改动你的文本、码点和 UTF-8 字节各是多少、改动能否撤销。对中文文本,NFC 和 NFD 那两行通常和输入完全相同,NFKC 那一行会把 A 变成 A、① 变成 1。

常见问题

我的韩文名字在 Excel 里为什么匹配不上?

一边是分解形式,另一边是合成形式。它们渲染得一模一样,字节序列却不同,所以精确匹配的查找失败。把两边都规范化成 NFC 就匹配了。

NFKC 到处都能用吗?

不能——它是单向的。㈜ 变成 (주),① 变成 1,A 变成 A,没有一个能变回去。用它做搜索键或比较,不要用在你要存储和显示的文本上。

NFC 会把我的 ㄱ 和 ㅏ 合成 가 吗?

不会。那些是兼容字母——键盘表上的独立字母——它们是单独的字符,不是组成音节的组合字母。只有 NFKC 会动它们,把它们映射到组合字母区块。

字节数为什么重要?

分解形式的韩文每个音节占 9 个 UTF-8 字节,合成形式占 3 个。一个名字在一台机器上通过长度检查、在另一台上失败,两边看起来毫无差别,原因就在这里。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。