BMP 是 Basic Multilingual Plane 的缩写,中文通常翻译为 基本多语言平面。
它是 Unicode 字符集中的第一个也是最重要的一个“平面”(Plane)。
Unicode 的“平面”概念:
Unicode 字符集非常庞大,为了管理和组织海量的字符,它将字符空间划分为 17 个“平面”,每个平面可以容纳 216=65,536216=65,536 个字符。这些平面从 0 到 16 编号。
- 平面 0: 就是 BMP (Basic Multilingual Plane)。
- 平面 1: SMP (Supplementary Multilingual Plane),辅助多语言平面。
- 平面 2: SIP (Supplementary Ideographic Plane),辅助表意文字平面。
- …等等。
基本多语言平面 (BMP) 的特点:
- 范围: BMP 包含的 Unicode 码点范围是 U+0000 到 U+FFFF。
- 核心字符集: 它是 Unicode 的核心,包含了世界上绝大多数常用字符,包括:
- 拉丁字母 (ASCII, 扩展拉丁字母)
- 希腊字母
- 西里尔字母
- 阿拉伯字母
- 希伯来字母
- 中文、日文、韩文的绝大部分常用汉字 (CJK Unified Ideographs)
- 假名、谚文
- 各种标点符号、数学符号、货币符号
- 常用控制字符
- 历史原因: 之所以称之为“基本”,是因为在 Unicode 标准的早期阶段,人们认为这 65,536 个字符足以涵盖世界上几乎所有需要计算机处理的字符。后来发现,为了收录更多的历史文字、生僻字、表情符号等,还需要扩展到更多的平面。
- UTF-16 的优势: 对于 BMP 中的字符,UTF-16 编码使用固定的 2 个字节来表示。这使得在处理这些字符时,UTF-16 显得相对高效和简洁。这也是为什么许多编程语言(如 Java、JavaScript)在内部使用 UTF-16 来表示字符串,因为它们的大部分处理都集中在 BMP 字符上。
- UTF-8 的表示: BMP 中的字符在 UTF-8 中通常使用 1、2 或 3 个字节表示。
- U+0000 到 U+007F (ASCII) 使用 1 字节。
- U+0080 到 U+07FF 使用 2 字节。
- U+0800 到 U+FFFF (包括大部分 CJK 汉字) 使用 3 字节。
超出 BMP 的字符:
那些不在 BMP 中的字符(即码点大于 U+FFFF 的字符,位于平面 1 到 16)被称为辅助平面字符。它们包括:
- 生僻汉字: 很多非常古老或不常用的汉字。
- 表情符号 (Emoji): 大部分现代表情符号都位于辅助平面。
- 历史文字: 如古埃及象形文字、楔形文字等。
- 某些数学符号和音乐符号。
这些辅助平面字符在 UTF-16 中需要使用 4 个字节(通过代理对机制)来表示,而在 UTF-8 中则需要 4 个字节来表示。UTF-32 则始终使用 4 个字节表示所有字符,无论是否在 BMP 中。