3.5 · 字符編碼
目標: 解釋字母如何變成位元組,説出課程中的四種編碼,併為情境選對一個。
為何需要編碼
電腦只存 0 和 1。字符編碼是字符(字母、符號、表意字)和整數代碼之間的約定映射,整數再以位儲存。
要讓文字正確傳輸,需要三件事一致:
- 字符集 —— 有哪些字符(字母表)。
- 編碼 —— 每個字符如何映射為二進制代碼。
- 位元組順序 / 解碼軟件 —— 位元組怎樣被讀回。
ASCII —— 元老
ASCII(美國資訊交換標準代碼)為基本英文字母、數字、標點和控制字符定義了代碼。
| 方面 | 詳情 |
|---|---|
| 每字符位數 | 7(常補足為 8 位 = 1 位元組) |
| 字符總數 | 128 |
| 涵蓋 | 英文字母、數字、標點、控制碼(CR、LF…) |
| 年份 | 1963 |
幾個 ASCII 代碼
| 字符 | 十進制 | 二進制 | 十六 |
|---|---|---|---|
A | 65 | 100 0001 | 41 |
a | 97 | 110 0001 | 61 |
0 | 48 | 011 0000 | 30 |
9 | 57 | 011 1001 | 39 |
(空格) | 32 | 010 0000 | 20 |
\n (換行) | 10 | 000 1010 | 0A |
兩條值得記的趣聞:
a − A = 32(小寫 = 大寫 + 32 → 易做大小寫轉換)。'9' − '0' = 9(易做數字字符到整數的轉換)。
你不需要背具體代碼
課程指引明言:「不要求記誦特定代碼。」 你需要理解原理。
Big-5 —— 繁體中文
| 方面 | 詳情 |
|---|---|
| 每字符位數 | 16(2 位元組) |
| 字符總數 | ~13,000+ |
| 涵蓋 | 繁體中文(主要為港台) |
| 年份 | 1984 |
每個漢字儲為 2 位元組。一份混合英文與中文的文件在 Big-5 下,英文存 1 位元組、中文存 2 位元組。
GB —— 簡體中文
中國國家標準 GB(國標)涵蓋中國大陸使用的簡體中文。
| 方面 | 詳情 |
|---|---|
| 每字符位數 | 2–4 位元組(依次為 GB2312、GBK、GB18030) |
| 涵蓋 | 簡體中文;後期版本含繁體 |
Unicode —— 全球標準
Unicode 為每種文字(拉丁、中文、阿拉伯、emoji、數學符號等等)的每個字符分配唯一編號(「碼點」)。
| 方面 | 詳情 |
|---|---|
| 字符總數 | 150,000+(持續增長) |
| 編碼 | UTF-8(每字符 1–4 位元組)、UTF-16(2 或 4 位元組)、UTF-32(恆為 4 位元組) |
| 使用者 | 現代 Web、現代操作系統、幾乎所有新軟件 |
UTF-8 是事實上的 Web 標準
UTF-8 很聰明:
- ASCII 字符編為 1 位元組(向後兼容)。
- 其他字符編為 2、3 或 4 位元組。
- 單一位元組流告訴解碼器當前字符佔幾個位元組。
'A' → 1 位元組: 01000001
'£' → 2 位元組: 11000010 10100011
'中' → 3 位元組: 11100100 10111000 10101101
'😀' → 4 位元組: 11110000 10011111 10011000 100000001
2
3
4
2
3
4
並排對比
| 特性 | ASCII | Big-5 | GB | Unicode (UTF-8) |
|---|---|---|---|---|
| 起源 | 美國 | 台 / 港 | 中國大陸 | 國際 |
| 每字符位元組 | 1 | 2 | 2–4 | 1–4 |
| 涵蓋 | 英文、ASCII | 繁體中文 | 簡體中文 | 所有 |
| 多語言安全? | 僅英文 | 有限 | 有限 | 是 |
| 當代建議 | UTF-8 子集 | 舊 | 舊 | 是 |
字符集大小為何重要
「字符集大小與表示之間的關係應予解釋。」
—— 課程指引
編碼一個字符集所需位數由集合大小決定:
| 字符集大小 | 需要位數 |
|---|---|
| 2(二元字母表) | 1 |
| 16 | 4 |
| 256 | 8 |
| 65,536(Unicode BMP) | 16 |
| 1,114,112(完整 Unicode) | 21(向上取整到 24 或 32) |
更大的字符集 → 每字符更多位 → 更多儲存與頻寬。
學生常見錯誤
- 説「ASCII 能存中文」 —— 不能(只有 128 個碼)。
- 把 Unicode(字符集)和 UTF-8(其一種編碼)混淆。
- 聲稱 Big-5 涵蓋簡體中文 —— 不。
- 忘了混用編碼會產生亂碼(mojibake)。
實用提示
- 文本文件一律存為 UTF-8 避免中文亂碼。
- 在 Excel 裏打開 CSV 時選 UTF-8 編碼保留中文。
- 網頁
<head>應聲明<meta charset="UTF-8">。
實例 · 「中文ABC」佔多少位元組?
在 UTF-8 下:
| 字 | 位元組 |
|---|---|
| 中 | 3 |
| 文 | 3 |
| A | 1 |
| B | 1 |
| C | 1 |
| 合計 | 9 位元組 |
在 Big-5 下:
| 字 | 位元組 |
|---|---|
| 中 | 2 |
| 文 | 2 |
| A | 1 |
| B | 1 |
| C | 1 |
| 合計 | 7 位元組 |
這裏 Big-5 更小,但不能表示 emoji 或西里爾字母。
練習活動
把每個情境匹配最合適的編碼:
| 情境 | 最佳編碼 |
|---|---|
| 1985 年的純英文遺留資料庫記錄 | ? |
| 香港繁體中文加 emoji 的報紙網站 | ? |
| 僅供大陸的簡體中文宣傳冊,無其他文字 | ? |
| 多語言的 Wikipedia 文章 | ? |
建議
- ASCII
- UTF-8 (Unicode)
- GB(或 UTF-8)
- UTF-8 (Unicode)
考試式題目
題(4 分): 比較 ASCII 與 Unicode 在 (a) 所支援字符範圍、(b) 每字符所用位元組方面的差異。説出多數現代網頁使用 Unicode (UTF-8) 的一個原因。
參考答案:
- 範圍:ASCII 支援 128 個字符(基本英文、數字、標點、控制碼)。Unicode 支援逾 150,000 個字符,覆蓋所有主要文字包括中文、阿拉伯、emoji。
- 位元組:ASCII 每字符 1 位元組(用 7 位)。Unicode 以 UTF-8 編碼時每字符 1–4 位元組;ASCII 字符仍 1 位元組以保向後兼容。
- 原因:網頁面向全球觀眾,需展示包含 emoji 與中文等多種文字;只有 Unicode 能編碼全部。
關鍵要點
- ASCII = 1 位元組,僅英文。
- Big-5 = 2 位元組,繁體中文。
- GB = 2–4 位元組,簡體中文。
- Unicode (UTF-8) = 1–4 位元組,全球默認。
- 字符集越大 → 每字符位數越多。
➡️ 下一節:3.6 多媒體數字化