直接回答:Unicode 是字符集标准:为全球每个字符分配唯一编号(码点,code point),如"中"是 U+4E2D。UTF-8 是把码点编码成字节序列的一种具体方案。一个是"字典",一个是"存储格式"。
展开解析:UTF-8 是变长编码,按码点范围用 1~4 个字节表示:
- ASCII 字符(U+0000~U+007F)占 1 字节,与 ASCII 完全兼容;
- 常用汉字(如"中")占 3 字节;
- 高位码点(部分 emoji、生僻字)占 4 字节。
它因此成为互联网主流编码(无字节序问题、ASCII 文档零浪费)。同属 Unicode 编码方案的还有 UTF-16(2 或 4 字节,Java/Windows 内部使用)和 UTF-32(定长 4 字节,空间浪费大)。
Python 中的体现:
s = "中" # Python 3 的 str 是 Unicode 码点序列
b = s.encode("utf-8") # b'\xe4\xb8\xad',3 个字节
b.decode("utf-8") # 还原为 "中"
易错点:len("中") 是 1(按字符),但 len("中".encode()) 是 3(按字节);读写文件忘记指定编码是乱码的头号来源。追问:UCS、BOM 与大小端、emoji 组合字符的长度问题。