除了Unihan,Unicode还有定义NFC/NFD/NFKC/NFKD四种normalization
后面两个相容性编码不说了,前两个正规等价:
NFC是等价组码
NFD是等价拆码
在unicodedata里面目前“拆组”对中文来说意义不大,主要是欧洲语言和韩语才有
拆组的等价性问题,比如说e上面一撇,可以是单独一个codepoint,
也可以是e的codepoint+那一撇的codepoint
中文的组合(IDC组字)目前不在unicodedata管辖范围
在那些unicode资料网站其实查U+FA97可以看到NFD/NFC都指向U+6D41
NFC实际上也是先经过NFD再组起来,所以对中文而言我们看NFD就好了
unicodedata的原始资料在
ftp://ftp.unicode.org/Public/7.0.0/ucd/UnicodeData.txt
不过他需要经过一些处理才能得到NFD的mapping
刚好有一份处理好的在
https://github.com/buganini/bsdconv/blob/master/modules/inter/_NFD.txt
韩文的拆组不在里面,因为依照unicode标准定义韩文的拆组是用程式计算的
里面去掉有拆码的row(有逗号的)应该就都是CJK汉字了
把unicodedata转成NFD table的程式在
https://github.com/buganini/bsdconv/blob/master/tools/unicode_gen.py
如果想要用肉眼看_NFD.txt
可以把bsdconv装起来然后执行
bsdconv bsdconv,utf-8:utf-8 _NFD.txt