2018年2月27日 星期二

引得市缺字字體編碼方案說明

引得市缺字字體編碼方案說明

知乎:https://zhuanlan.zhihu.com/p/34081721

撰文者:趙瑾昀

起先在
v1.x版本的seal字體中,我們擬使用基本平面私用區(Private Use Area, PUA),該區只有6400個位置,而當時我們的缺字數量已經達到了九千多,所以我們還使用了第15平面的SPUA作爲補充。

V1.x版本的seal字體有個很大的缺陷,那就是缺字的Unicode碼點是按照glyphwiki上的順序自動順延產生,並不固定。這意味着同一個缺字在不同版本的字體中所使用的Unicode碼點往往不同(因爲我們在glyphwiki造字時會按照康熙部首順序從中間位置插入新字,從而更動了原來的順序),致使不同版本的字體不能兼容。


攷慮到引得市的缺字字形是由缺字編碼唯一確定的,所以若要固定缺字字形的Unicode碼點,就必須爲每一個合法的缺字編碼預分配/映射一個Unicode碼點,使其能夠一一對應。一個合法的缺字編碼可表示爲sXXX-YYY,其中XXX取值笵圍爲001215,代表康熙214部首及圖形部,總計215部;而YYY取值笵圍爲001999,爲該部下具體的編號。因此引得市缺字編碼的空間大小爲215*999=214785,大約需要佔用4個平面/Plane(注:每個平面有65536個碼點)。在這種情況下把基本平面和第1516平面的私用區都拿過來也不夠用,因此我們借鑑中華字庫中間字庫的做法,選擇佔用目前未定義的第1013平面(U+A0000U+DFFFF)作爲編碼空間,以儘量避免在可預見的未來數十年內與其他字庫產生衝突(如使用了第1516平面的全字庫,使用了第3至第6平面的中華字庫中間字庫等等,以及CJK擴展G集即將啓用的第3平面)。


圖1 生成缺字編碼空間的Python程式

圖2 生成對應Unicode編碼的Python程式(其中每個平面的最後兩個字符,即U+XFFFE和U+XFFFF,需要跳過)


圖3 得到的缺字編碼與Unicode碼點對應表

沒有留言:

張貼留言

20240422《中國語言學大辭典》分類詞目表索引數位化完成

 20240422《中國語言學大辭典》分類詞目表索引數位化完成 知乎: https://zhuanlan.zhihu.com/p/693938707 【製作說明】 這本書在33年前出版,正在看這篇文章的朋友可能都還沒出生?1991年那時候我在作什麼呢?就讀專科學校(美術工藝科),...