作者buganini (霸格尼尼)
看板Perl
标题Re: [问题] 一个奇怪的汉字编码问题(Unihan?)
时间Sun Sep 27 23:14:31 2015
除了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
--
其实个人觉得Unihan比较偏向给人用的知识库,
里面包含不少直接拿来给程式用会觉得怪怪的mapping
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 128.199.200.203
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1443366876.A.655.html
※ 编辑: buganini (128.199.200.203), 09/27/2015 23:18:53
2F:→ buganini: 就好了,不需要自己弄table啦xd 09/27 23:20
※ 编辑: buganini (128.199.200.203), 09/27/2015 23:57:31
3F:推 herculus6502: 推 11/01 06:45