字元表示:賦予字母二進制之聲(課程大綱 3.5.4)
歡迎來到迷人的字元表示世界!在本章中,我們將探討電腦(本質上只懂二進制,即 1 和 0 的序列)是如何處理、儲存並顯示我們日常生活中使用的所有字母、數字和符號——從英文字母到複雜的表情符號與各國文字。
理解這個過程非常重要,因為它解釋了文字數據是如何被處理的,以及為什麼某些系統(例如舊型電腦)在顯示不同語言的字元時有時會出現亂碼。
1. 核心概念:字元集與編碼
為了儲存一個字元(如 'A'、'7' 或 '$'),電腦並不是儲存該字元的形狀本身,而是儲存一個數值代碼,該代碼隨後會被轉換成位元模式(即二進制)。
- 字元集 (Character Set):你可以把它想像成一本巨大且標準化的字典或查詢表。它是電腦可以識別和解釋的一系列定義好的字元列表。
- 唯一代碼 (Unique Code):字元集中的每個字元都分配有一個唯一的數值(即代碼)。當你輸入 'A' 時,電腦會儲存對應 'A' 的數字。當電腦需要顯示 'A' 時,它會去字元集中查詢該數字,從而知道要在螢幕上繪製出什麼樣的形狀。
重點總結:文字數據是以數字形式儲存的,而這些數字本身又是以位元模式儲存的。
2. ASCII:原始標準
最早且最基礎的標準是 ASCII(美國資訊交換標準代碼,American Standard Code for Information Interchange)。
什麼是 ASCII?
ASCII 於 1960 年代引入,成為編碼英文字元的標準方式。
- 位元長度:ASCII 是一個 7 位元編碼系統。
-
容量:使用 7 個位元,我們可以表示 \(2^7\) 種不同的數值。
\(2^7 = 128\) 個唯一字元。
這 128 個代碼涵蓋了:
- 大寫字母 (A-Z)
- 小寫字母 (a-z)
- 數字 (0-9)
- 常見標點符號(如 !, ?, &)
- 控制字元(如換行或定位符)
你知道嗎?在許多舊系統中,ASCII 被擴充為 8 位元(通常稱為「擴展 ASCII」)以表示另外 128 個歐洲語言字元,但這些擴充內容並未在全球標準化,這導致了嚴重的相容性問題!
3. Unicode 的需求與 UTF-8 的興起
ASCII 的主要問題在於其局限性:128 個字元遠不足以表示全球使用的所有字元(試想一下中文字、阿拉伯文,甚至是像 'é' 這樣帶有變音符號的歐洲字母)。
Unicode 的引入正是為了克服這種國際性的限制。
理解 Unicode
Unicode 是一個字元集,它為全球幾乎所有語言和書寫系統中的每一個字元都分配了一個唯一數字。目前它已經定義了超過 140,000 個字元。
- 多種編碼系統:與 ASCII 不同,Unicode 非常龐大,並且使用不只一種方式(編碼系統)來儲存這些數字。
- 你需要知道的最常見且最重要的編碼系統是 UTF-8。
專注於 UTF-8
UTF-8(Unicode 轉換格式 - 8 位元)是目前全球(特別是在網際網路上)使用最廣泛的 Unicode 編碼系統。它因其高效與高相容性而大受歡迎。
變動長度編碼 (Variable Length Encoding):
UTF-8 是一種變動長度編碼系統。這意味著它根據字元的不同,使用不同數量的位元:
- 對於常見字元(如英文),它使用 8 位元(1 個位元組)。
- 對於較罕見的字元,它可能會使用 16、24 或 32 位元(2、3 或 4 個位元組)。
向後相容性 (Backwards Compatibility):
UTF-8 的精妙之處在於它與 ASCII 的向後相容性。Unicode/UTF-8 中的前 128 個字元(代碼 0 到 127)與 ASCII 中的完全一致。這使得那些只識別 ASCII 的舊系統也能夠輕鬆處理基本的 UTF-8 文字而不會出錯。
快速複習:ASCII 與 UTF-8
ASCII:簡單、7 位元、128 個字元、僅限英文。
UTF-8:複雜、變動長度(8 至 32 位元)、全球覆蓋、與 ASCII 向後相容。
4. 理解字元代碼的分組
在解答考試題目時,你不必背誦每一個字元代碼,但你必須知道 ASCII 和 Unicode 中主要字元「區塊」的起始點(因為它們在該範圍內是匹配的)。
-
數字 (0-9):從代碼 48 開始。
例如:'0' = 48, '1' = 49, '9' = 57。 -
英文大寫字母 (A-Z):從代碼 65 開始。
例如:'A' = 65, 'B' = 66。如果已知 'A' 是 65,你可以輕鬆計算出 'G' = 65 + 6 = 71。 -
英文小寫字母 (a-z):從代碼 97 開始。
例如:'a' = 97, 'b' = 98。
記憶小撇步:記住關鍵數字:48、65、97。
5. 關鍵區別:字元代碼 vs. 純二進制
這是一個常見的混淆點!你必須區分十進位數字的字元代碼表示法(如字元 '6')與數值的純二進制表示法(如數字 6)。
類比:標籤 vs. 數量
想像你有 6 個蘋果。
1. 蘋果的數量是 6。在純二進制中,這是 110(使用 3 個位元)。
2. 你寫在盒子上的標籤是字元 '6'。
逐步範例(數字 6):
我們想要儲存數字 6。
情況 1:儲存數值 "6"(純二進制)
如果你將數字 6 作為整數數據類型 (Integer data type) 儲存,電腦會使用純二進制進行計算。
- 十進位值:6
- 純二進制(8 位元):00000110
情況 2:儲存字元 '6'(字元代碼)
如果你將符號 '6' 作為字串數據類型 (String data type) 的一部分儲存(例如電話號碼或地址),電腦會使用其字元代碼。
- 我們知道數字從代碼 48 開始。
- 字元 '6' 是第 7 個數字(因為 '0' 是第 1 個)。
- ASCII 代碼:\(48 + 6 = 54\)。
- ASCII 二進制(7 位元):0110110
- UTF-8 二進制(8 位元,已填充):00110110
注意兩者的差異:
純二進制 (6):00000110
字元代碼 ('6'):00110110
如果電腦試圖使用字元代碼 '6' 進行計算,運算結果將會完全錯誤!這就是為什麼在程式設計中,轉換操作(如將「字串轉換為整數」,這在課程大綱的其他部分會討論)至關重要。
常見錯誤警示!
不要將數字的代碼與該數字的值混淆。如果你讀取文字 "123",電腦看到的是三個獨立的字元代碼(分別對應 '1'、'2' 和 '3'),而不是單一的數學值 123。
本章總結:字元表示
我們透過在字元集中為每個字元分配一個唯一的數值代碼來表示字元。
- ASCII (7 位元) 是最初的標準,將表示範圍限制在 128 個字元。
- Unicode 的建立是為了支援全球所有字元,並使用了多種編碼系統。
- UTF-8 是目前主流的變動長度 Unicode 編碼,專門設計成與 ASCII 向後相容(代碼 0-127 完全相同)。
- 請記住關鍵起始代碼:數字 (48)、大寫字母 (65)、小寫字母 (97)。
- 數字的字元代碼與其純二進制數值不同。例如,字元 '1' 的儲存代碼是 49,而數值 1 的純二進制則是 00000001(以 8 位元計算)。