Bear's House
資訊科技

認識中文字元碼

 
 

首  頁

資訊科技

教育 學習

有感而發

相關鏈結

批評指教

 

 

一、字元與編碼

(一)何謂字元

  字元(character)是人類語文的最基本單位,例如:中文字、英文字母、阿拉伯數字、標點符號等。而字元集(character set)則是指某種語文的全部字元(例如:英文的字元)或部份字元(例如:中文的字元)所形成的集合。

  字元也是電腦輸入、儲存、列印、顯示和處理文數字資訊的基本單位。任何電腦都必須具備內建的字元集,才能和人類溝通以及處理文數字資訊。電腦所使用的字元,可區分為圖形字元和控制字元兩類:

  • 圖形字元(graphic characters)指的是可以被顯示在螢光幕上或是被列印在報表紙上,用以構成文數字資訊或電腦語言的字元。就英文字元集而言,所包含的圖形字元為52個大小寫英文字母、10個阿拉伯數字和一些標點符號,總數還不到100個。但就中文字元集而言,所包含的圖形字元至少是成千上萬的中文字。

  • 控制字元(control characters)則代表特定的處理功能,可驅使電腦或通信設備執行特定程式,以進行特定處理或表現特定動作,例如:驅使螢光幕上的游標回到行首並換行、驅使印表機換行或跳頁、開始或終止資料的傳輸等。原則上,控制字元不具備可顯示或可列印的圖形。

 

(二)何謂編碼

  就微觀角度而言,電腦的硬體是由數以億計、極為微小(寬度甚至還不到十萬分之一公分)的電晶體開關所建構成的。這些開關只能有「開(on)」和「關(off)」兩種狀態,習慣上分別以“1”和“0”來表示,因此電腦內部可以看做是二進制數字的世界。換言之,在電腦系統內部,不論是用以組成程式的指令或任何形式的資料(包括:文字、圖形、影像、聲音、動畫等),全都是以二進制形式表現(驅使電晶體開關開或關)的電磁信號。

  由於硬體的限制,所有字元都必須先轉換成二進制數字才能被電腦所接受和處理。這種二進制數字又稱為二進碼(binary code)。二進碼的任何一個數位(digit),因其值必須是“1”或“0”,所以被稱做位元(bit,為“binary digit”取第一個字母和最後兩個字母所組成的新英文單字)。針對特定的字元集,分別賦予每個字元一個對應的二進碼,稱為編碼。而對應於個別字元的二進碼則稱為字元碼(character code)。為了減少字元碼的書寫位數,習慣上將字元碼從二進制數字轉換成等值的十進制數字或十六進制數字。【註:十六進制每個數位的值為0至15,其中10到15以大寫字母A至F表示之;在本文中,於數字之後附加h表示十六進制。】

  字元編碼可大致分成下列四個步驟:

  1. 首先建立字元集,也就是蒐集和整理所需要的圖形字元和控制字元。

  2. 將字元集的所有圖形字元加以排序。圖形字元的次序先後,決定字元碼的相對大小,並影響未來文數字資訊以字元碼大小排序的結果。通常是將圖形字元依據某些慣例和字元屬性加以排序,例如:英文字母先排大寫由“A”到“Z”、再排小寫由“a”到“z”,阿拉伯數字則由“0”排到“9”等。至於控制字元,則不一定需要排序。

  3. 依據字元集大小決定位元組長度。字元碼通常安排成固定長度(即位元數)。就長度為m的二進碼而言,共有2m個不同的位元值組合,每個位元值組合為一個碼位(code position),所有這些 碼位的集合稱為編碼空間。假設二進碼的長度為3個位元,則其編碼空間為集合{000, 001, 010, 011, 100, 101, 110, 111},共23=8個 碼位。就特定字元集的編碼而言,編碼空間必須足以容納該字元集的所有字元。換言之,假設該字元集共有N個字元,且假設字元碼的長度為m,則m必須是等於或大於log(N)的最小整數,在此log的底數為2(亦即,2m≧N)。特定字元集編碼所需最小位數的二進碼稱為位元組(byte,原為bit的複數)。若某字元集共有90個字元,則針對此字元集,一個位元組必須至少是七個位元(因為26=64<90<27=128)。

  4. 編碼,也就是將已經排好順序的全部字元,依序分別賦予每個字元一個字元碼。

  請注意,上述的步驟2和步驟3只是原則而已。事實上,字元碼長度的選定和逐字元給碼,都必須遵守既定的標準或規範,下文中將進一步說明。

 

(三)位元組的演變

  早期電腦的主記憶體使用磁蕊記憶器,存取速度慢、價格昂貴而記憶容量小,因此設法減少原始程式和文數字資訊所佔用的記憶空間便成為當務之急。解決方法之一是︰將電腦所用的字元集簡化到只用26個大寫英文字母、10個阿拉伯數字,以及少數必要的標點符號和控制字元。如此一來,只需六個位元(共計64個 碼位)就足以因應編碼所需。換言之,在早期的電腦系統裡,一個位元組為六個位元。眾所周知的程式語言FORTRAN IV只准許使用大寫英文字母、阿拉伯數字和很少的幾個標點符號來編寫程式,就是這時期所流傳下來的。雖然以六個位元為一個位元組幾乎是當時電腦廠商的共識,而且彼此的字元集內容也很相近,但字元的編碼卻並不一致。可以說,在1950∼60年代,美國的電腦業界可說是萬「碼」奔騰、百家爭鳴。

  從1950年代中期起,隨著第一代商用電腦的日趨普及,美國圖書館界開始使用電腦來印製書目卡片,不久線上書目查詢系統也接著登場。為了降低編目作業的成本,避免重複編目,各圖書館開始提出共享書目的需求。但彼此使用不同的字元碼,卻妨礙了圖書館自動化業務的發展。1960年代初期,為解決書目資料交換的問題,美國國會圖書館(LC, Library of Congress)的Henriette Avram等人開始研擬機讀編目格式 (machine-readable cataloging),同時James Agenboard等人也制訂了英文的字元集和交換碼,以做為美國圖書館界書目交換的共同標準。LC所編訂的字元集增加了小寫英文字母、收容了更多的標點符號和控制字元,因此六個位元變得不敷編碼所需。很自然的,一個位元組就由原先的六個位元增加為七個位元(共計128個 碼位)。LC所制定的交換碼隨後成為美國的國家標準ASCII,並進而變成國際標準ISO/IEC 646。【註:ISO為國際標準組織(International Organization for Standardization)的縮寫,IEC則為國際電氣技術委員會(International Electrotechnical Commission)的縮寫,至於“ISO/IEC”則表示該標準係由兩機構共組的各個聯合技術委員會所通過發佈的。】

  ASCII原為交換碼,只是設計來做為各電腦之間,或是電腦與周邊設備之間,交換文數字資訊用的字元碼。但由於ASCII方便易用,加上半導體記憶體逐漸取代了磁蕊記憶體,使得電腦主記憶體的容量大增而價格急速下降,電腦廠商於是開始直接把ASCII當內碼,用以表達電腦內部的文數字資訊。雖然ASCII只有七個位元,但電腦廠商為了提升資料傳送時的可靠度,往往附加一個同位檢測用的位元,使得一個位元組雖然名義上是七個位元,但實質上卻是八個位元。1980年代以後,隨著微處理器技術的快速發展和工作站、個人電腦(PC)的日趨風行,因著微處理器是以8、16、32甚或64個位元為一個運算處理單位,使得一個位元組等於八個位元逐漸成為大家的共識。總而言之,以八個位元為一個位元組並非理當如此,而是有其歷史背景的。

返回目錄  下一章