什么是字符集和字符編碼?
前面我們已經講到,計算機是以二進制的形式來存儲數據的,它只認識 0 和 1 兩個數字,我們在屏幕上看到的文 字,在存儲之前都被轉換成了二進制(0和 1 序列),在顯示時也要根據二進制找到對應的字符。
可想而知,特定的文字必然對應着固定的二進制,否則在轉換時將發生混亂。那么,怎樣將文字與二進制對應起來 呢?這就需要有一套規范,計算機公司和軟件開發者都必須遵守,這樣的一套規范就稱為字符集(Character Set) 或者字符編碼(Character Encoding)。
嚴格來說,字符集和字符編碼不是一個概念,字符集定義了文字和二進制的對應關系,為字符分配了唯一的編號, 而字符編碼規定了如何將文字的編號存儲到計算機中。我們暫時先不討論這些細節,姑且認為它們是一個概念,本節中我也混用了這兩個概念,未做區分。
字符集的功能:字符集定義了文字和二進制的對應關系,為字符分配唯一的編號
字符編碼的功能:字符編碼規定了如何將文字的編號存儲到計算機中
可以將字符集理解成一個很大的表格,它列出了所有字符和二進制的對應關系,計算機顯示文字或者存儲文字,就 是一個查表的過程。
在計算機逐步發展的過程中,先后出現了幾十種甚至上百種字符集,有些還在使用,有些已經淹沒在了歷史的長河 中,本節我們要講解的是一種專門針對英文的字符集——ASCII 編碼。
ASCII碼的由來
計算機是美國人發明的,他們首先要考慮的問題是,如何將二進制和英文字母(也就是拉丁文)對應起來。
當時,各個廠家或者公司都有自己的做法,編碼規則並不統一,這給不同計算機之間的數據交換帶來不小的麻煩。 但是相對來說,能夠得到普遍認可的有 IBM 發明的 EBCDIC 和此處要談的 ASCII。
我們先說 ASCII。ASCII 是“American Standard Code for Information Interchange”的縮寫,翻譯過來是“美國信息 交換標准代碼”。看這個名字就知道,這套編碼是美國人給自己設計的,他們並沒有考慮歐洲那些擴展的拉丁字母, 也沒有考慮韓語和日語,我大中華幾萬個漢字更是不可能被重視。
但這也無可厚非,美國人自己發明的計算機,當然要先解決自己的問題
ASCII 的標准版本於 1967 年第一次發布,最后一次更新則是在 1986 年,迄今為止共收錄了 128 個字符,包含 了基本的拉丁字母(英文字母)、阿拉伯數字(也就是 1234567890)、標點符號(,.!等)、特殊符號(@#$%^&等) 以及一些具有控制功能的字符(往往不會顯示出來)。
在 ASCII 編碼中,大寫字母、小寫字母和阿拉伯數字都是連續分布的(見下表),這給程序設計帶來了很大的方便。 例如要判斷一個字符是否是大寫字母,就可以判斷該字符的 ASCII 編碼值是否在 65~90 的范圍內。
EBCDIC 編碼正好相反,它的英文字母不是連續排列的,中間出現了多次斷續,給編程帶來了一些困難。現在連 IBM 自己也不使用 EBCDIC 了,轉而使用更加優秀的 ASCII。
ASCII 編碼已經成了計算機的通用標准,沒有人再使用 EBCDIC 編碼了,它已經消失在歷史的長河中了。
ASCII編碼一覽表
標准 ASCII 編碼共收錄了 128 個字符,其中包含了 33 個控制字符(具有某些特殊功能但是無法顯示的字符)和 95 個可顯示字符。