如何精確地表示生僻字

眾所周知,不同於西方的文字系統,可以通過字母線性組合形成單詞,再連綴成句;我們的漢字系統是通過構字部件(俗稱偏旁)平面組合形成漢字[1],再連綴成句的。很遺憾的是計算機是西方人發明的,規則定製也多以西方的習慣為原型,漢字的信息化也只好削足適履,被動適應西方標準。

目前大部分的漢字字符集(包括 Unicode),對於漢字編碼的處理大致為先搜集漢字,給予每個漢字一個數字編碼。然而,漢字數量龐大,往往字集不完全。再加上漢字本身具有組合以及開放的特性,漢字使用者很有可能自造新字,因此不可能有一個字集可以搜集到所有漢字。[2]

基於這種考慮,Unicode 組織在 3.0 版本開始,對 CJKV 統一表意文字做了一個新的支持——表意文字描述序列(Ideographic Description Sequences,以下簡稱IDS)。其目的是利用十二種組合字元,來描述所定義的漢字內部構字部件的相對位置,從而精確表示生僻字(或未被電腦字符集收入的缺字)。

如果大家有關注「疑難字辨識」話題的話,應該會注意到這些題目的風格都很接近(都使用了「????????????」等符號來表示生僻字)。這十二個符號的名字叫做「表意文字描述字元」(Ideographic Description Characters,以下簡稱IDC)。

其使用方法如下:

那麼有人或許要問,如果我所要表示的漢字的構字部件不止兩個怎麼辦呢?

沒關係,我們可以繼續往下擴寫,類似 1×2÷3+4-5 這樣的數學運算表達式。這種表達式就是筆者前文提到的 IDS 。其中構字部件相當於數學運算表達式中的數字和未知數,十二種 IDC 相當於數學運算表達式中的算術運算符。就像下面這樣:

(注意:此處 Figure 12-8 來自 Unicode 6.2.0 官方文檔(見參考文獻 4 )。例 10 裡面的?(U+2FF2)和?(U+2FF3)用反的問題已經修復。感謝@艦隊街 Todd@席禎@摩山等細心讀者的指正。 同時也感謝@梁海 先生的意見。)

這裡還要注意兩個細節:

  1. 十二種 IDC 之間沒有優先順序順序。(優先順序順序相當於算術運算符中的先乘除,後加減。當然你了解蛋疼的 C 語言運算符優先順序順序更好。)

  2. IDC 與構字部件是通過波蘭表達式(前綴表達式)構造成 IDS 的。(下面會講到。或者你點擊超級鏈接進去了解一下。碼農同志應該都會的。)

如上圖例 4 所示,用前綴表達式構造的 IDS ?廠?今止 相當於 ?廠(?今止) 。即先對「今」和「止」做上下結構的拼合,再對這個拼合部件與「廠」做左上方的半包圍拼合。將這個 IDS 轉換成普通的中綴表達式應該是 廠?(今?止)

另外,漢字構字部件拆分的粒度完全由你自己決定,只要你覺得能表示到位就可以。如上圖的例 1、2、3 以及例 5、6、7、8 各自表示同一個漢字。(就像算術表達式 1+2 與 1+(1+1) 等價一樣)

接著我們來實練一次吧。

(以上截圖來自 iOS 應用——《康熙字典》)

最後布置一個課後作業,本文章最開頭題圖中出現的「biang」字,用 IDS 表示出來應該是什麼樣子?(答案可參考下頭的參考文獻 6 、7。)

下課。

————————————————————

參考文獻:

[1]: 獨體字一定是獨體字結構嗎?怎麼「臣」字是獨體字,卻是半包圍結構?

[2]: http://zh.wikipedia.org/zh-hk/表意文字描述序列

[3]: Chinese character description languages

[4]: unicode.org/versions/Un, Page 423~425

[5]: http://zh.wikipedia.org/zh-hk/波蘭表示法

[6]: IDS + OpenType: Pseudo-encoding Unencoded Glyphs, 小林劍(Ken Lunde)

[7]: Biángbiáng麵


推薦閱讀:

漢字科普網站推薦(七)——漢語多功能字型檔
單竹「個」與雙竹「竹」——論「個」之字源
《通用規範漢字表》3500一級字壁紙集
無料≠免費,十個最容易讓你誤解的日語漢字
漢字科普網站推薦(六)——國學大師

TAG:汉字 | Unicode统一码 | 疑难字辨识 |