本文从kazenoyumechen.wordpress.com上迁移过来
相信大家也有過這樣的經歷,當使用編輯器打開別人的文件時,顯示出來的文件內容是不可讀的。在網上查閱一陣資料瞎搗鼓後,發現只需在編輯器中設置編碼格式之後,文章的內容便會正確顯示了。其實上述問題只是一個簡單的字符編碼解碼問題,爲了解釋清楚這個問題,我們先來看看編碼與解碼兩者的定義。
- 字符集:由多個字符組成的集合。如西文‘a’-’z’所構成的集合是一個字符集,由所有漢字字符所組成的集合也是一個字符集。
- 字符編碼(Character Encode):將字符集中所有元素均轉換爲另一種便與計算機存儲的格式(比特模式,電脈衝)。
- 字符解碼(Character Decode):將計算機中存儲的數據轉換爲人可讀的數據格式。
當用戶編寫完一系列的文檔並希望存儲在操作系統時,操作系統會將用戶所輸入的字符先轉換到計算機可讀的編碼格式(字符編碼)。用戶需要讀取該文件時,系統會將該文件中的數據轉換爲人可讀的數據(字符解碼)。
當讀者讀到這裏的時候,可能會問,計算機並不能表示非比特模式的數據啊,那麼人在讀數據的時候也是讀到二進制的數據,這數據又怎麼可讀呢?其實在系統內部,存在着字體庫(Font)。我們所看到的文字其實是數據經過字體庫轉換顯示而成的。字體庫中的字體通常是由像素點所表示而成的,當像素點顯示到屏幕上時,我們自然可以把字體辨認出來了。
目前,在中國大陸地區,常見的字符編碼格式有:
- ASCII:全稱爲American Standard Code for Information Interchange,只能表示128個字符集。其中包含’a’-‘z’,’A’-‘Z’和’0‘-’9‘。該編碼格式是最古老的編碼格式。在1960年時,計算機只在使用英文的國家中流行。爲了解決不同計算機中存儲格式不一致的問題,委員會制定了ASCII格式。後來由於計算機的推廣,他們不得不考慮不同國家中不同文字編碼格式的問題。
- GB2312:中華人民共和國國家標準簡體中文字符集,1981年開始實施。該收錄漢字覆蓋了中國大陸漢字99.75%的使用頻率,但並不能表示某些人名或古漢字,導致後來出現了它的改進版本,GBK和GB18030。 GBK:GBK是GB2312的擴展,1993年推出。
- UNICODE:萬國碼,它對世界上大部分文字進行了整理和編碼。不同語言的數據在遵守此規範的情況下可以很容易地進行交換。每個字符在計算機中表示均使用兩個字節進行表示,總共可表示65536個字符。然而,由於其格式,使得它存儲效率非常低下。UNICODE只是一種規範,在不同平臺上有不同的實現。
- UTF-8:針對UNICODE的可變長度編碼,UNICODE的一種實現。該編碼格式可以用來表示UNICODE中的任意字符,同時該編碼方式也與ASCII兼容。這是目前在計算機中最爲常用的編碼格式。同時還存在UTF-16,UTF-32的編碼格式。
- GB18030:與GBK基本兼容,同時收錄了UNICODE的所有漢字字符,共收錄漢字字符70244個。目前在中華人民共和國內強制實行,所有軟件制品都需要支持該編碼格式。
參考資料: