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) 的特点:

  1. 范围: BMP 包含的 Unicode 码点范围是 U+0000 到 U+FFFF
  2. 核心字符集: 它是 Unicode 的核心,包含了世界上绝大多数常用字符,包括:
    • 拉丁字母 (ASCII, 扩展拉丁字母)
    • 希腊字母
    • 西里尔字母
    • 阿拉伯字母
    • 希伯来字母
    • 中文、日文、韩文的绝大部分常用汉字 (CJK Unified Ideographs)
    • 假名、谚文
    • 各种标点符号、数学符号、货币符号
    • 常用控制字符
  3. 历史原因: 之所以称之为“基本”,是因为在 Unicode 标准的早期阶段,人们认为这 65,536 个字符足以涵盖世界上几乎所有需要计算机处理的字符。后来发现,为了收录更多的历史文字、生僻字、表情符号等,还需要扩展到更多的平面。
  4. UTF-16 的优势: 对于 BMP 中的字符,UTF-16 编码使用固定的 2 个字节来表示。这使得在处理这些字符时,UTF-16 显得相对高效和简洁。这也是为什么许多编程语言(如 Java、JavaScript)在内部使用 UTF-16 来表示字符串,因为它们的大部分处理都集中在 BMP 字符上。
  5. 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 中。