解读 Unicode

平面 - plane

共 17 个平面,每个平面占 65536 个字符
基本多文种平面 - Basic Multilingual Plane(0x0~0xFFFF)
其余16种补充/辅助平面(0x10000 ~ 0x10FFFF)

编码空间

0x0~ 0x10FFFF

存储定义

UCS - Universal Character Set

ISO/IEC 10646 定义

  • UCS-2
    编码空间为 0x0 ~ 0xFFFF
    无辅助平面
    兼容 Unicode,保留 0xD800 ~ 0xDFFF
  • UCS-4
    旧定义
    编码空间为 0x0 ~ 0x7FFFFFFF
    新定义
    编码空间限制为 Unicode (0x0~ 0x10FFFF)
    ISO 承诺不会为超过 0x10FFFF 进行编码

UTF - Unicode Transformation Format

UTF-8

变长编码(1~4字节)
编码空间为 0x0 ~ 0x10FFFF

  • 对于单字节的符号
    字节第一位设为 0
    后面7位填充编码值
    对于 0x0~0x7F, UTF-8 和 ASCII 码是一致的

  • 对于 n 字节的符号(n>1)
    第一个字节的前 n 位 都是1
    第 n + 1 位设置为 0
    后面字节的前两位为 10
    其余空位填充为编码值

  • 旧的定义
    定义1~6字节
    RFC 2044
    RFC 2279

  • 新的定义 RFC 3629
    定义为1~4字节

    编码范围 字符数 Unicode UTF-8
    0x000000 ~ 0x00007F 128 00000000 00000000 0zzzzzzz 0zzzzzzz(00-7F)
    0x000080 ~ 0x0007FF 1920 00000000 00000yyy yyzzzzzz 110yyyyy(C0-DF)10zzzzzz(80-BF)
    0x000800 ~ 0x00D7FF
    0x00E000 ~ 0x00FFFF
    61440 00000000 xxxxyyyy yyzzzzzz 1110xxxx(E0-EF)10yyyyyy(80-BF)10zzzzzz(80-BF)
    0x010000 ~ 0x10FFFF 1048576 000wwwxx xxxxyyyy yyzzzzzz 11110www(F0-F7)10xxxxxx(80-BF)10yyyyyy(80-BF)10zzzzzz(80-BF)

UTF-16

变长编码(2或4字节)
编码空间为 0x0 ~ 0x10FFFF

  • 与 UCS-2 区别
    UTF-16 是 UCS-2 父集
    当表示 BMP 时, 与 USC-2 编码一致都是16-bit
    当表示辅助平面时,UTF-16为 32-bit,而UCS-2不能表示
  • 辅助平面表示
    码位值 - 0x10000 得到 20-bit 的值(0x0 ~ 0xFFFFF)
    该值前10位 + 0xD800(0xD800 ~ 0xDBFF)
    该值后10位 + 0xDC00(0xDC00 ~ 0xDFFF )
    连接以上两个值得到最终编码值

UTF-32

固定 32-bit 编码,与 Unicode 编码数值一致
编码空间为 0x0 ~ 0x10FFFF

  • 与 UCS-4 区别
    旧定义: UTF-32是 UCS-4 的一个子集
    新定义: 可以认为与 UCS-4 是相同

你可能感兴趣的:(解读 Unicode)