從 cns11643 中文標準全字庫生成倉頡和速成官方碼表

一直以來,我對倉頡速成這對難兄難弟是很有意見的……網上流傳的碼表版本繁多,但名字都叫“倉頡”,和五筆對比起來,好歹五筆還分個 86 和 98,再新一點還有 新世紀 等等,但倉頡沒有,不論什麼版本的倉頡,都叫“倉頡”。

這就很尷尬,每個人用的倉頡碼表都不一樣,但不一樣在哪裡,他自己也不知道。

總之, 全字庫(cns11643) 提供了一種官方的通用的中文編碼,本來這個東西是用來彌補 utf8 之類對中文表達能力不足的,就像 gb18030,不過有趣的是它的數據包裡還包含了倉頡編碼,中文發音、偏旁部首、筆劃數量、筆劃過程等等數據,所以拿來生成的倉頡碼表,應該算是“官方”碼表了吧。

轉碼

下載後數據包中都有說明,找到 OPEN_DATA/Napidagtbles/統一 目錄,裡邊有三個編碼映射文件,我們需要先把編碼映射字典處理出來,不然直接用全字庫編碼是人類不可讀的。

比如這樣:

編碼很簡單,全字庫編碼對應 unicode 編碼,我們只需要將對應的 unicode 編碼轉換成人類可讀的文字即可,關鍵語句如下(Python 3):

這裡註意第五行,我們給 unicode 碼前加入 \u 前綴,讓他變成一個 unicode 的 escape,然後所有的 unicode 編碼規則的字符串就轉換成了“uffff”的形狀,接下來把字符串 encode 成二進制,再用 unicode 解碼即可生成人類可讀的中文字符了。

生成後就是如下樣子:

當然,也包含了這個樣子:

這些是因為全字庫的文本範圍比 utf8 表達的範圍大導致的,你無法在普通設備上看到這些文字,所以就顯示成亂碼了。總之,我們也不需要這些字,畢竟大部分設備上也無法顯示,簡單來說,直接判斷字符數量,超過1就跳過就行了。

速成

這樣,我們就得到了全字庫對應中文字符的表格,現在可以生成倉頡碼表了,生成後有 9 萬多字,但實際上能顯示的還是 2 萬左右,同樣的道理,去掉無法表達的字符,剩下的就是“官方碼表”了。

至於說速成,速成是倉頡的簡化,基本規則就是倉頡編碼超過兩位則取頭尾……

即 a→a、AB→AB、ABC→AC、abcd→ad……以此類推。

這下,我們就得到了全字庫速成和全字庫倉頡碼表。

授權

全字庫是開放授權的,註明出處即可,參考授權聲明。任何人都可以在開放平台下載這個字庫。

參考文獻

  • 全字庫官網 https://www.cns11643.gov.tw

本文由 落格博客 原創撰寫:落格博客 » 從 cns11643 中文標準全字庫生成倉頡和速成官方碼表

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/3211.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

  1. 好久以前就看到這篇,最近下來比對了下,他們這套數據確實全,單從收字數數據來看比就rime-cangjie多收了2萬條左右,但是有比較嚴重的二、三代編碼遺留,對習慣五代碼的人來說不友好。去除冗餘的BMP CJK兼容形式以後,感覺可以用來補一補rime-cangjie的潛在缺碼。

    現在大陸的民間的cangjie用戶基本都跑到rime陣營了,算是目前唯一相對活躍維護的開源倉頡輸入法解決方案吧。

發表評論

您的電子郵件地址不會被公開. 必填字段標 *