字元編碼
字元編碼是為了在電腦上使用文字(字元;character),而定義每個字的位元組形式。或指位元組形式與文字體系的關係(字碼表)。
定義
字集與編碼
傳統上,字集(character set)的概念與編碼時常被混淆,尤其是繁體中文使用者。因為Big5、Unicode之類的規格,都同時是字集標準也定義了編碼方式。
如HTML、MIME也以 charset 來描述文件編碼,嚴格來說是種誤用(encoding 是比較準確的稱呼)。
現代編碼模型
UTR#17描述了一套4層的完整編碼模型,去說明如何將一種文字體系進行編碼:
- 抽象字元表(ACR;Abstract character repertoire):是一個文字系統所有抽象字元的無序集合(整理這個文字系統需要用到哪些字)。例如英文字母表、五十音表、國字常用標準字體表都是抽象字元表。
- 編碼字元集(CCS;Coded Character Set):是將上述抽象字元裡每個字賦予其非負整數編號或座標(碼位)。例如在ASCII裡,A字的碼位是整數65,B則是66,依序編下去。摩斯電碼、傳統電報碼也都算是編碼字元集。編碼字元集可編碼的範圍需要考量後述字元編碼形式的限制,通常是受限的,且必須事先定義,稱為編碼空間(encoding space)。例如ASCII是0~127的7位元空間;ISO-8859-1的編碼空間是256。遵守ISO-2022的JIS、GB2312、CNS11643則是由一至多個94×94的編碼空間構成的。大範圍的編碼空間,通常會習慣用平面(plane)、區(area)、位(point)來描述文字編碼的位置,故編碼空間的一個位置稱為碼位(code point)。
- 字元編碼形式(CEF;Character Encoding Form):是將編碼字元集的碼位(非負整數或座標)轉換成有限位元長度的序列單位(稱為碼元;code unit)。這可以是固定長度的,也可以是可變長度的。對應的方式通常基於某種數學計算。最單純的字元編碼形式就是單純選擇足夠大的單位,將碼位一對一對應到一個碼元,例如UTF-32。但這種方式隨著字元集規模愈來愈大變得愈來愈浪費空間,或是實務上要考量到很多實作面的機械限制(如不同OS下可用的區域不同)。CEF的作用是,它可以把編碼空間裡每個碼位,以巧妙的方式對應到長度不一的位元組序列,例如UTF-8、UTF-16。
- 字元編碼方案(CES;Character Encoding Scheme)也稱作序列格式,將碼元轉換成實際用來傳輸、儲存的位元組形式時的方式。通常是Big Endian、Little Endian的古老問題(如UTF-16的UTF-16LE、UTF-16BE)。
補充說明
- Big5未遵守ISO-2022,本身是個編碼字元集,也是字元編碼形式。這是這些概念一直混為一談的主因。
- CNS11643是個編碼字元集,它的字元編碼形式如EUC-TW。由於Big5實際收錄的文字大致符合CNS11643的第一、第二字面,或許也可以將Big5視為一種CNS11643的字元編碼形式。*1
- JIS X 0208是編碼字元集,它的字元編碼形式如Shift_JIS、ISO-2022-JP、EUC-JP等。
類似用詞
- 建立於 2022 年 3 月 16 日 10 時 40 分
- 本條目共被 1 位不同作者編輯過 1 次
- 最後一次修改於 2022 年 3 月 16 日 10 時 40 分