跳到主要内容
uencoder

UTF-16

UTF-16 是 Unicode 的变长编码形式,使用 2 或 4 字节表示一个码点,BMP 字符用 1 个 16 位码单元,补充平面字符用代理对(2 个码单元)。

用途

在 BMP 字符占主导的场景(如 Windows API、Java 字符串内部表示)下兼顾空间效率与全 Unicode 覆盖。

机制

BMP 码点(U+0000-FFFF)直接存为 1 个 16 位单元。补充码点(U+10000-10FFFF)减去 0x10000 后拆为高 10 位与低 10 位,分别加上 0xD800 与 0xDC00 形成代理对。字节序由 BOM(U+FEFF)指示。

用例

  • Windows API 内部字符串
  • Java/JavaScript 字符串内部表示
  • .NET String 内部存储
  • 文件名(NTFS)存储

示例

  • 输入
    A
    输出
    0x00 0x41

    UTF-16BE, 2 bytes

  • 输入
    😀
    输出
    0xD8 0x3D 0xDE 0x00

    A surrogate pair, 4 bytes

常见错误

Ignoring surrogate pairs, producing wrong character counts
Use code-point-aware APIs or surrogate-pair-aware iteration

相关词条

相关工具

参考链接