漫話:爲什麼生僻字計算機上打不出來,或者打出來也無法顯示呢?

電腦如何顯示字符

我們在《漫話:如何給女朋友解釋爲什麼計算機只認識0和1?》中介紹過,在計算機世界中,只有0和1兩個字符,所有的數據都需要通過二進制表示,如52個英文字母(大寫+小寫)、阿拉伯數字以及常用的符號等在計算機都需要通過二進制來表示。

所以,我們在電腦上看到的所有字符,都需要通過一種方式將他們裝換成二進制表示。

那麼轉換的這個過程就需要通過字符編碼做映射,我們在《漫話:如何給女朋友解釋什麼是"錕斤拷"?》中介紹過,爲了將字符轉換成二進制,有很多字符編碼的標準被制定出來,其中包括Unicode、GBK等。

那麼,有了字符編碼之後,計算機就可以認識我們想輸入的字符了,但是想要把他展示出來還是比較複雜的,大致流程如下:

當我們在鍵盤上輸入一個字符之後,計算機會通過Unicode,將這個字符轉換成二進制。

接下來,通過獲得到的Unicode編碼值,查詢字體文件中的Charmap,把編碼值轉換成字形索引。

一旦你獲得了字形索引,你便可以裝載對應的字形圖像。

之後,就可以對這個字形圖像進行圖形渲染,然後就可以顯示在顯示器上面了。

大家或許對字形索引、圖形渲染這些不是很瞭解,沒關係,大家只需要知道,一個字符想要在電腦上顯示出來,需要以下三個條件:

1、輸入法支持輸入這個字符

2、Unicode編碼支持將這個字符轉成二進制

3、計算機上安裝的字體中包含這個字符

輸入法支持字符集

由於漢字數以萬計,電腦鍵盤不可能爲每一個漢字而造一個按鍵。因此,人們需要替漢字編一套輸入碼(檢索出漢字的代碼),用數個鍵來輸入一個漢字。而把多個按鍵輸入轉換成漢字的工具就是中文輸入法。

而目前市面上比較常見的中文輸入法,大多數都是採用的GBK的作爲字符集的。


GBK共收錄21886個漢字和圖形符號,其中漢字(包括部首和構件)21003個,圖形符號883個。但是中文漢字遠不止2萬多,所以,很多生僻字是無法通過輸入法打出來的,如"Biángbiáng面"中的biáng字。

另外,還有些輸入法使用了比較全的字符集(Unicode等),如鄭碼、倉頡等輸入法是可以輸入一些生僻字的。

Unicode

字符能夠在電腦上顯示,還有一個前提就是他可以被翻譯成二進制,也就是說,如果一個字符沒有被Unicode收錄的話,是無論如何都無法顯示的。

所以,目前很多漢字的生僻字,還有一些emoji都是無法打出來的。

但是Unicode還是在不斷更新的,最近一次更新是2020年3月10日,剛剛發佈了Unicode 13.0,Unicode 13.0共增加了5,930個字符,目前共有143,859個字符。

在Unicode 13.0的CJK 統一表意漢字的擴展G區中,已經收錄了"Biángbiáng面"中的biáng字,可以看到,其對應代碼爲30EDD何30EDE。

中日韓統一表意文字(CJK Unified Ideographs),CJK 是中文(Chinese)、日文(Japanese)、韓文(Korean)三國文字的縮寫,目的是要把分別來自中文、日文、韓文、越文、壯文中,本質、意義相同、形狀一樣或稍異的表意文字於ISO 10646及Unicode標準內賦予相同編碼。

但是雖然Unicode 13.0已經推出了,但是因爲文字編碼是要內嵌到操作系統中的,所以還需要操作系統底層也做更新才能兼容。

字體

如果Unicode中已經包含了某個生僻字,那麼在展示的時候,就會通過得到的Unicode編碼值,查詢字體文件中的Charmap,把編碼值轉換成字形索引。

但是,如果預裝字體中不包含某些字符的話,也是無法展示的。

也就是說,如果輸入法可以兼容最新版的Unicode 13.0,並且操作系統也升級到了最新版的Unicode編碼,也不意味着直接就可以顯示像"biáng"這樣被最新收錄的生僻字。

因爲這還依賴於操作系統中的字體是否包含這個字符。目前市面上有些商業字體是可以支持CJK中的很多擴展字符的。

相信隨着操作系統和輸入法更新到新版本的Unicode字符集之後,會有部分字體開始支持新的字符的。

生僻字帶來的不便

目前有很多家長願意給孩子起名的時候使用一些生僻字,尤其是一些有美好寓意的生僻字更是經常被使用,如寓意美好的頔。

據新聞報道,某大學生的名字中就曾經使用過"由頁"這個字,但是這個字的繁體字“頔”可以打出來,但是簡筆用拼音、五筆輸入法都打不出。

奇怪的是,當初在公安系統登記名字的時候,卻登記成功了,但是在日後的生活中,這位大學遇到了很多阻礙,如支付寶無法實名認證、無法實名制購票、甚至無法報考高考等問題。


後來公安系統的工作人員表示:公安人口信息庫專用字庫是最全的,甚至包括了不少少數民族的文字,設有生僻字庫。但教育部門、銀行、航空公司、房產等部門,卻沒有同步使用這套字庫,無法共享很多生僻字,就會出現一系列問題。

有些時候,在一個體系內可以打出來或者顯示的生僻字,在另外的體系內就有可能無法顯示。所以,對於生僻字的使用,還是要慎重!

關於作者漫話編程,是一個通過漫畫+音頻的形式講解枯燥的編程知識的公衆號。致力於讓編程變得更有樂趣。

推薦閱讀:

喜歡我可以給我設爲星標哦

好文章,我 在看 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章