UTF-16的计算公式

26 0

UTF-16 是 Unicode 的一种变长编码,编码单元是 16 位:基本多文种平面(BMP,U+0000–U+FFFF)用 2 个字节,辅助平面(U+10000–U+10FFFF,如多数 emoji)用一对代理项共 4 个字节。下面重点说明公式与推导。

UTF-16的计算公式

字节数:每个 BMP 字符 2 字节,每个辅助平面字符 4 字节,若写 BOM 再加 2 字节。“123问”全是 BMP,UTF-16 为 8 字节;UTF-8 是 6 字节。纯英文用 UTF-16 会比 UTF-8 大约多一倍。

输入:123问

编码结果:

UTF-16BE 00 31 00 32 00 33 95 EE;UTF-16LE 31 00 32 00 33 00 EE 95;带 BOM 的默认 UTF-16(本机/Python 为 LE)FF FE 31 00 32 00 33 00 EE 95

说明:共 8 字节(不含 BOM)。BMP 字符 2 字节,辅助平面 4 字节(代理对)。

与相关技术的区别

UTF-16 与 UTF-8:UTF-8 兼容 ASCII、英文 1 字节、汉字 3 字节,更适合交换;UTF-16 英文 2 字节,汉字通常也是 2 字节,适合在内存中随机访问 UTF-16 代码单元。UTF-32 则是固定 4 字节,更占空间。

Java 示例

下面是 Java 中处理UTF-16的常用写法:

"中".getBytes(StandardCharsets.UTF_16BE);
"😀".length();  // 2(UTF-16 代码单元)
"😀".codePointCount(0, "😀".length()); // 1

运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。

本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【为什么 JavaScript 里 emoji 的 length 是 2?】length 按 UTF-16 代码单元计数,emoji 是一个代理对。

【UTF-16 和 UCS-2 有什么区别?】UCS-2 只覆盖 BMP,没有代理对;UTF-16 是 UCS-2 的超集。

【英文用 UTF-16 浪费空间吗?】每个 ASCII 字符要 2 字节,是 UTF-8 的两倍,所以文本文件更推荐 UTF-8。

文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: UTF-16 数码开发

抱歉,评论功能暂时关闭!