ANSI C讀書筆記系列之字符集篇----第二章 字符集和編碼(I ANSI編碼)

這兩個概念容易讓人混淆,因爲他們一般並未被嚴格區分.拋開編碼討論字符集是沒有意義的,一如討論編碼一定是針對某一字符集而言的.所以上章在結尾我們不自覺的就說到了字符集與編碼的一些基本概念.

制定編碼首先要確定字符集,並將字符集內的字符排序,然後和二進制數字對應起來.根據字符集內字符的多少,會確定用幾個字節來編碼. 每種編碼都限定了一個明確的字符集合,叫做被編碼過的字符集(Coded Character Set),這是字符集的另外一個含義.通常所說的字符集大多是這個含義.

所以說,字符集和編碼是一對整體出現的概念,我們可以只說字符集,那一定也包含針對該字符集的編碼方式,我們也可以只說編碼,那一定也包含該編碼對應的字符集.下面我們主要說下字符編碼的發展歷程.

我想把字符集的編碼發展分成兩個階段,當然,這只是我自己的意思,ANSI編碼階段和UNICODE編碼階段.爲什麼這麼分,我只是想說,編碼的發展史經歷過各自爲陣的階段,然後纔有全球統一的通用字符集編碼.

首先出場的自然是大名鼎鼎的ASCII碼(American Standard Code for Information Interchange,美國信息互換標準代碼)了,從0到127號表示了空格,標點符號,數字,大小寫字母等等,存儲英文文字是沒有問題了,當時世界上所有的計算機都用同樣的ASCII方案.這個階段其實也可以說是通用字符集編碼階段,但毫無疑問,這種通用,是低級的,樸素的.(有點歷史發展的味道了,樸素的原始社會只有經歷奴隸社會,封建社會,資本主義社會才能到到那高級的沒有剝削的共產主義社會呵呵).

當計算機到一些不是很發達的歐洲國家時,即便他們也使用拉丁字母語言,也會有一定數量的變化字母,當然,還有什麼西裏爾字母的東歐語言,希臘語,希伯來語等等,ASCII碼就不夠了.還好,還有一位沒用啊,那就把128號到255號都用上吧,這些字符集被稱"擴展字符集".問題在於,同時產生這種想法的人太多,在128~255之間的各個位置上應該存放什麼仁者見仁智者見智.於是只要人們開始在美國以外的地方購買計算機,那麼各種各樣的不同OEM字符集都會進入規劃設計行列.這一階段的成果就是ISO/IEC 8859,它是國際標準化組織(ISO)及國際電工委員會(IEC)聯合制定的一系列8位字符集的標準,現時定義了15個字符集.這裏提下ISO 8859-1,它是其中最優秀的擴展方案,通常稱之爲Latin-1或Extended ASCII.Latin-1包括了足夠的附加字符集來寫基本的西歐語言.

現在,計算機來到中國(當然,日本,韓國什麼的也都有這問題)了,泱泱中華,區區256個符號當然不夠了.於是我們不客氣地把那些127號之後的奇異符號們直接取消掉, 規定一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一起時,就表示一個漢字,前面的一個字節(高字節)從0xA1用到0xF7,後面一個字節(低字節)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了,這種漢字方案叫做"GB2312",但是中國的漢字太多了,於是我們不得不繼續把 GB2312 沒有用到的碼位找出來繼續用上.我們規定只要第一個字節是大於127就固定表示這是一個漢字的開始,這是GBK 標準,GBK 包括了GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號,後來GBK又擴成了GB18030,這是漢字"大一統"的標準.從此,中華民族的文化就可以在計算機時代中傳承了.

有關咱自己的文化說多了一點,其實也就是對ASCII 的中文擴展. 不同的是,咱這是"DBCS"(Double Byte Charecter Set 雙字節字符集).在DBCS系列標準裏,最大的特點是兩字節長的漢字字符和一字節長的英文字符並存於同一套編碼方案裏.
上面說的字符集發展過程可以看作是第一個ANSI編碼階段.基本結果是各個國家都搞出了一套自己的編碼標準.這裏還有一個字節序問題未介紹,這將在介紹完Unicode編碼歷史後一道說起.

字符集編碼的歷史進程介紹繼續.

 

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章