### **什么是 UTF-8?** UTF-8(**Unicode Transformation Format - 8-bit**)是一种 **可变长度的字符编码**,用于**兼容 [[ASCII]] 并支持全世界的所有字符**。它是目前**互联网上最常用的字符编码**。 --- ## **1. UTF-8 解决了什么问题?** **ASCII** 只能表示 **128 个字符**(英文字母、数字、基本符号),无法表示中文、日文、韩文、阿拉伯文等非拉丁字符。 为了解决这个问题,**Unicode** 标准出现了,理论上可以为**世界上所有字符分配一个唯一的数值(码点)**,但问题是: - **Unicode 直接使用 16 位或 32 位存储字符,导致文件变大**(比如 `A` 原本 ASCII 只要 1 字节,Unicode 却可能用 2 字节)。 - **与 ASCII 不兼容**,老系统和 ASCII 兼容性差。 **UTF-8 就是 Unicode 的一种编码方式,既支持所有字符,又能保证与 ASCII 兼容。** --- ## **2. UTF-8 的工作方式** UTF-8 是**可变长编码**,根据字符的不同,**使用 1~4 个字节表示**: - **ASCII 兼容性**:0~127 的 ASCII 字符只占 **1 字节**(和 ASCII 完全一样)。 - **拉丁文扩展字符(欧洲语言)**:需要 **2 字节**。 - **汉字、日文、韩文**:需要 **3 字节**。 - **特殊字符和Emoji**:可能需要 **4 字节**。 **示例:** |字符|Unicode 码点|UTF-8 编码(十六进制)|UTF-8 字节数| |---|---|---|---| |A|U+0041|`41`|1 字节| |é|U+00E9|`C3 A9`|2 字节| |中|U+4E2D|`E4 B8 AD`|3 字节| |😃|U+1F603|`F0 9F 98 83`|4 字节| --- ## **3. UTF-8 为什么重要?** ✅ **兼容 ASCII**,所有 ASCII 文件直接当作 UTF-8 读取不会出错。 ✅ **节省空间**,常见字符用 1~3 字节,而不是固定 2 或 4 字节。 ✅ **全球通用**,支持 **中文、阿拉伯文、俄文、Emoji 等所有语言**。 ✅ **成为互联网标准**,所有网页、JSON、XML 默认都使用 UTF-8。 --- ## **4. UTF-8 如何区分字符长度?** UTF-8 采用 **首字节标识长度**,然后后续字节带上 `10` 前缀: |UTF-8 字节数|编码范围|二进制格式| |---|---|---| |1 字节|0x00 - 0x7F|`0xxxxxxx`| |2 字节|0x80 - 0x7FF|`110xxxxx 10xxxxxx`| |3 字节|0x800 - 0xFFFF|`1110xxxx 10xxxxxx 10xxxxxx`| |4 字节|0x10000 - 0x10FFFF|`11110xxx 10xxxxxx 10xxxxxx 10xxxxxx`| 示例: - `A`(U+0041):**1 字节**,`01000001` - `é`(U+00E9):**2 字节**,`11000011 10101001` - `中`(U+4E2D):**3 字节**,`11100100 10111000 10101101` - `😃`(U+1F603):**4 字节**,`11110000 10011111 10011000 10000011` 这样,**解码时计算机可以判断字符是 1、2、3 还是 4 字节,无需额外标记!** --- ## **5. UTF-8 和其他编码的对比** |编码方式|字节数|兼容 ASCII|适合哪些情况| |---|---|---|---| |ASCII|1 字节|✅|仅限英语和基本符号| |UTF-8|1-4 字节|✅|适合全球所有语言,网页、数据库| |UTF-16|2-4 字节|❌|适合大量亚洲字符(但不如 UTF-8)| |UTF-32|4 字节|❌|适合极端高效的 Unicode 处理(很少用)| --- ## **6. 什么时候使用 UTF-8?** ✅ **几乎所有情况下都推荐使用 UTF-8**,除非你有特殊需求,比如: - **网页和 HTML 文件**:现代浏览器默认 UTF-8。 - **数据库(MySQL、PostgreSQL)**:存储多语言数据时,推荐 `utf8mb4`。 - **JSON / XML / CSV**:跨平台数据存储,UTF-8 最通用。 - **编程语言(Python、JavaScript、Java 等)**:字符串默认 UTF-8 编码。 --- ## **7. 总结** 1. **UTF-8 是 Unicode 的一种编码方式**,用于表示**全球所有字符**。 2. **可变长编码(1~4 字节)**: - **ASCII 兼容**(0~127 只占 1 字节)。 - **其他字符**使用 2-4 字节存储。 3. **互联网和跨平台应用最广泛的编码**,网页、API、数据库默认使用 UTF-8。 4. **节省存储空间**,比 UTF-16/UTF-32 更高效。 --- ### **简单记住 UTF-8** ✔ **兼容 ASCII**(所有 ASCII 文件就是合法的 UTF-8)。 ✔ **1~4 字节可变长编码**(节省存储空间)。 ✔ **全球通用,支持所有语言**(中文、日文、韩文、Emoji)。 ✔ **互联网标准**(网页、数据库、API 默认使用 UTF-8)。