引得市缺字字體編碼方案說明
知乎: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取值笵圍爲001~215,代表康熙214部首及圖形部,總計215部;而YYY取值笵圍爲001~999,爲該部下具體的編號。因此引得市缺字編碼的空間大小爲215*999=214785,大約需要佔用4個平面/Plane(注:每個平面有65536個碼點)。在這種情況下把基本平面和第15、16平面的私用區都拿過來也不夠用,因此我們借鑑中華字庫中間字庫的做法,選擇佔用目前未定義的第10~13平面(U+A0000~U+DFFFF)作爲編碼空間,以儘量避免在可預見的未來數十年內與其他字庫產生衝突(如使用了第15、16平面的全字庫,使用了第3至第6平面的中華字庫中間字庫等等,以及CJK擴展G集即將啓用的第3平面)。
圖1 生成缺字編碼空間的Python程式
圖2 生成對應Unicode編碼的Python程式(其中每個平面的最後兩個字符,即U+XFFFE和U+XFFFF,需要跳過)
圖3 得到的缺字編碼與Unicode碼點對應表
沒有留言:
張貼留言