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 多媒体数字化