作者flu (Crazy Rhythm)
看板Perl
标题Re: [问题] 一个奇怪的汉字编码问题(Unihan?)
时间Fri Aug 7 03:35:01 2015
※ 引述《herculus6502 (金麟岂是池中物)》之铭言:
: 在考选部公布的考毕试题 pdf 档案中,如果出现"流行"这个词
: 在 grep 的时候都会找不到
: 仔细检查後发现,在 linux 上这两个字比起用输入法打出来的字"略小",字码亦不同
: 但在 windows 上似乎刻意地都显示为较大的"流行"二字
: 实际上的例子我找到这个网页 http://cs.sungshin.ac.kr/~shim/demo/ksc5601-c.htm
: 里面的"流","行",各有两个编码存在
: 找到 wiki 上有关 unihan 的条目,觉得可能是这个问题
: 不知各位网友在实务上有无遇到过类似的问题? 或是该如何解决?
: 目前我是用 regex 去取代,但是怕还有其它未爆弹,不知有无现成的对应表?
: perl -CSAD -ne 'print $1 if /([\x{f900}-\x{fa2d}])/g' *.txt
: 目前我只能先用这行找出有问题的字来转换
找了一阵子的心得
A. 首先以unicode han 之类的关键字去找到了这个wikipedia条目
https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block)
焦点放在表格下半部,在uni han栏位标示为 not unified的几个表格
B. 以「行」字去找发现出现在几个code base
行 -- U+2F8X from Kangxi Radicals block (*1)
-- U+FA08 from CJK Compatibility Ideographs block
-- U+884C from CJK UNIFIED IDEOGRAPHS (通常打字会打这个出来)
( 或许还有其它…)
C. 1. 以得到的三个code point找到
http://www.unicode.org/charts/beta/normalization/chart_Han.html *2
的确是在相邻的两列将「行」的code point都列了出来
但可惜不是以类似上述B点的方式列出方便programmer直接使用
2. 以下这个文件内的表格或许能较方便地得到上述B点的结果
http://download.microsoft.com/download/5/0/1/
501ED102-E53F-4CE0-AA6B-B0F93629DDC6/SharePoint/[MS-FSIN].pdf 请手动拼行
3. Perl lib的 unicore/Decomposition.pl 也有在处理B点的对应
终於找到可能有关的module Unicode::UCD , Text::Unicode::Equivalents
D. 试用module
没有试…
杂想:
1. 有些网站能查询某个字的其他code point,像是「行」的三个
没有详细去看是否有另外提供列表下载
2. 如果加入了unicode的特性——可以两个字合成一个新字
比如说 U+328E (圈起来的金)
假设可以由 〇+金 组起来的话
〇先不谈,由於金也出现在上述B的三个表内
会处理这些字的场合又会复杂一点
3. 这算是汉字在unicode议题上的normalization议题吗?
*1
https://en.wikipedia.org/wiki/Kangxi_radical#Unicode
*2 列表在
http://www.unicode.org/charts/beta/normalization/index.html
有在持续更新的unicode说明的站(日文)
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/index_u.html
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.235.212.170
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1438889708.A.96B.html
※ 编辑: flu (36.235.212.170), 08/07/2015 03:41:12
1F:推 herculus6502: 感谢<(_ _)> 08/07 09:22
2F:推 cutekid: 推呀(Y) 09/15 16:16