Unicode 规范化
Unicode Normaliser
套用 NFC、NFD、NFKC 或 NFKD——NFKC 顺带把全角字母数字折成半角,NFC 则是 macOS 来的韩文看着一样却怎么都搜不到时的解法。
在四种 Unicode 规范化形式之间转换文本,并以码点和字节显示每一种改变了什么。实际会碰到的情况是韩文:在 Mac 上输入的名字以分解形式存储,和在 Windows 上输入的同一个名字比较不相等,所以搜索或 VLOOKUP 什么都找不到。汉字没有分解形式,NFC 和 NFD 都不会动它;对中文文本,会改变东西的是 NFKC,它把全角字母和数字折成半角。
原文
已组合。网页、Windows 和几乎所有数据库都指望这个形式。从这里开始。
不会离开这个标签页。每敲一个键就重新正规化,四个形式一起算出来,方便对照。
这段文本里有 6个散开的谚文字母。
这就是 macOS 的文件名形式。屏幕上看着是正常的韩文,可是和在 Windows 上敲出来的同一段文字比较起来并不相等,所以检索或 VLOOKUP 什么都找不到。NFC 会把音节重新拼回去。
NFC 结果
四个形式对照
| 形式 | 是否改动 | 码位 | UTF-8 字节 | 能否还原 |
|---|---|---|---|---|
| NFC | 是 — 从第0个码位起 | 22 | 46 | 是 |
| NFD | 是 — 从第7个码位起 | 37 | 89 | 是 |
| NFKC | 是 — 从第0个码位起 | 24 | 44 | 否 |
| NFKD | 是 — 从第7个码位起 | 40 | 90 | 否 |
真正要紧的是字节这一列:分解的韩文每个音节要 9 个 UTF-8 字节,组合的只要 3 个。同一个名字在一台机器上过得了长度检查,在另一台上过不了,原因就在这里。
NFC 改动了什么
- 第0个
한글한글码位 6 → 2
怎么用
粘贴匹配不上的文本
如果里面有拆开的韩文字母,在你做任何别的事之前,警告会连同数量一起出现。这个警告只统计韩文字母,中文文本不会触发它。
没有特别理由就用 NFC
NFC 是网页、Windows 和所有数据库期望的合成形式。NFD 是 macOS 存储文件名的形式。NFKC 是搜索键,不是显示文本。
决定之前比较全部四种
表格显示哪些形式会改动你的文本、码点和 UTF-8 字节各是多少、改动能否撤销。对中文文本,NFC 和 NFD 那两行通常和输入完全相同,NFKC 那一行会把 A 变成 A、① 变成 1。
常见问题
我的韩文名字在 Excel 里为什么匹配不上?
一边是分解形式,另一边是合成形式。它们渲染得一模一样,字节序列却不同,所以精确匹配的查找失败。把两边都规范化成 NFC 就匹配了。
NFKC 到处都能用吗?
不能——它是单向的。㈜ 变成 (주),① 变成 1,A 变成 A,没有一个能变回去。用它做搜索键或比较,不要用在你要存储和显示的文本上。
NFC 会把我的 ㄱ 和 ㅏ 合成 가 吗?
不会。那些是兼容字母——键盘表上的独立字母——它们是单独的字符,不是组成音节的组合字母。只有 NFKC 会动它们,把它们映射到组合字母区块。
字节数为什么重要?
分解形式的韩文每个音节占 9 个 UTF-8 字节,合成形式占 3 个。一个名字在一台机器上通过长度检查、在另一台上失败,两边看起来毫无差别,原因就在这里。
可以从这些接进来
大小写与命名法转换
Case Converter
在全大写、全小写、标题式、句首大写、camelCase、snake_case、kebab-case 和 CONSTANT_CASE 之间转换。
空白字符清理
Whitespace Cleaner
去掉行尾空格、把连续空格并成一个、转换制表符并删掉空行。
编码检测与转换
Encoding Detector & Converter
并排预览每个候选编码来判断文件的字符集——GBK、GB18030、Big5 都在候选里——再另存为 UTF-8(带或不带 BOM)、UTF-16 或 EUC-KR/CP949。
Unicode 字符解析
Unicode Inspector
把文本拆成一个个码位,列出名称、区块、书写系统和 UTF-8/UTF-16 字节序列。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
CSV 清洗
CSV Cleaner
去掉单元格首尾空白、统一表头、修正数字和日期格式,并报出列数对不上的行。
韩文初声检索
Hangul Initial Search
从韩文里抽出初声辅音,并用初声串检索名单——打 ㄱㅁㅇ 就能找到 감마원。
编码检测与转换
Encoding Detector & Converter
并排预览每个候选编码来判断文件的字符集——GBK、GB18030、Big5 都在候选里——再另存为 UTF-8(带或不带 BOM)、UTF-16 或 EUC-KR/CP949。
Unicode 字符解析
Unicode Inspector
把文本拆成一个个码位,列出名称、区块、书写系统和 UTF-8/UTF-16 字节序列。
隐形字符清除
Invisible Character Remover
找出并删掉粘贴文本里藏着的零宽空格、BOM、软连字符和双向控制符。
查找与替换
Find & Replace
按字面、整词或正则表达式替换文本,支持捕获组,并把每一处命中先预览出来。