信息科技· 第1章 数据与信息 · 1.2 数据编码与数字化生活
1.2.3知识点 · 课时

文字编码

理解 ASCII、GB2312、Unicode 等文字编码的演进,认识乱码的成因。

文字编码:让字符变成 0/1

上一节我们知道,计算机里所有数据都是二进制。那么字符(字母、数字、汉字)是怎么变成 0/1 的呢?靠的就是编码——给每个字符规定一个唯一的二进制编号。

文字编码的演进

计算机是美国人发明的,最初只考虑英文:

1. ASCII 码(1963 年)

  • 7 位二进制(0~127)表示 128 个字符
  • 包含:英文大小写字母、数字、标点、控制符
  • 'A' = 65,'a' = 97,'0' = 48

2. 中文编码:GB2312 / GBK / GB18030

  • 一个汉字需要更多位
  • GB2312(1980):6763 个汉字,2 字节/字
  • GBK(1995):21003 个汉字,含繁体
  • GB18030(2000):国家强制标准,覆盖少数民族文字

3. Unicode:统一天下的编码

  • 1991 年发起,目标是给全世界每个字符一个唯一编号
  • UTF-8 是 Unicode 最常用的实现方式
  • 英文 1 字节、中文通常 3 字节、emoji 4 字节
字符ASCIIGB2312UTF-8
'A'01000001(1 字节)01000001(1 字节)01000001(1 字节)
'中'❌ 不支持11010110 11010000(2 字节)11100100 10111000 10101101(3 字节)
😀11110000 10011111 10011000 10000000(4 字节)

为什么会乱码

打开网页看到"烫烫烫"或"锟斤拷"?这是编码不匹配:

  • 文件用 UTF-8 存储,但用 GBK 解码(或反过来)
  • 解决:统一使用 UTF-8

📱 项目案例·编码探秘

  • 用手机浏览器打开任意网页 → 长按 → "查看源代码",找到 <meta charset="UTF-8">
  • 在 Python 里试试(下章会学):len('A'.encode()) = 1,len('中'.encode()) = 3

🤔 思考

  • 为什么 emoji 比"中"字还多占 1 字节?
  • 一条朋友圈 100 个汉字,用 UTF-8 大约占多少字节?合多少 KB?

📝 知识小结

  • 文字编码:ASCII(英文)→ GB2312(中文)→ Unicode/UTF-8(统一)
  • UTF-8 是变长编码:英文 1 字节,中文 3 字节,emoji 4 字节
  • 乱码 = 编码与解码方式不匹配,统一用 UTF-8 即可避免