UTF编码内存角度比较.md

UTF-8、UTF-16 和 UTF-32 是三种不同的 Unicode 编码方式,它们在表示字符时占用的字节数各不相同。具体如下:

  1. UTF-8

    • UTF-8 是一种可变长度的编码方式,每个字符占用 1 到 4 个字节。
    • 具体字节数取决于字符的 Unicode 码点:
      • U+0000 至 U+007F(基本拉丁字母)占 1 个字节。
      • U+0080 至 U+07FF 占 2 个字节。
      • U+0800 至 U+FFFF 占 3 个字节。
      • U+10000 至 U+10FFFF 占 4 个字节。
  2. UTF-16

    • UTF-16 也是一种可变长度的编码方式,每个字符占用 2 或 4 个字节。
    • 具体字节数取决于字符的 Unicode 码点:
      • U+0000 至 U+FFFF(基本多语言平面,BMP)占 2 个字节。
      • U+10000 至 U+10FFFF(辅助平面)占 4 个字节(使用一对代理项,即高位代理项和低位代理项,每个占 2 个字节)。
  3. UTF-32

    • UTF-32 是一种固定长度的编码方式,每个字符占用 4 个字节。
    • 无论字符的 Unicode 码点是多少,每个字符始终占用 4 个字节。

总结:

  • UTF-8:1 到 4 个字节,具体取决于字符。
  • UTF-16:2 或 4 个字节,具体取决于字符。
  • UTF-32:固定 4 个字节。

这三种编码方式各有优缺点。UTF-8 是最常用的编码方式,因其对 ASCII 字符的高效编码(仅占 1 个字节),节省空间且向后兼容 ASCII。UTF-16 在处理基本多语言平面字符时相对高效,但对于包括大量辅助平面字符的文本,可能会占用更多空间。UTF-32 最简单,但由于每个字符固定占用 4 个字节,通常会占用更多的存储空间。