normalize の NFKC と NFKD の違いをざっくり解説

「ざ」という文字は二つの見方があります。

さ + ゙

濁点や半濁点を分解しないか、するか。これが NFKC と NFKD のざっくりとした違いです。

NFKC 分解しない
NFKD 分解する

const c = 'ざ'.normalize('NFKC')
const d = 'ざ'.normalize('NFKD')

console.log(c)
// ざ

console.log(d)
// ざ

const cItems = c.split('')
const dItems = d.split('')

console.log(cItems)
// ['ざ']

console.log(dItems)
// ['さ', '゙']

㈱の正規化

正規化の例としてよく挙がる㈱は NFKC と NFKD で同じ結果となります。

const c = '㈱'.normalize('NFKC')
const d = '㈱'.normalize('NFKD')

const isEqual = c === d

console.log(isEqual)
// true

const cItems = c.split('')
const dItems = c.split('')

console.log(cItems)
// ['(', '株', ')']

console.log(dItems)
// ['(', '株', ')']

㈱は NFKC と NFKD でカッコが分離され、半角カッコが独立しています。