UTF-16依据的标准

96 0

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

UTF-16依据的标准

  • 不允许孤立的代理项
  • UTF-16 不兼容 ASCII 的单字节形式(拉丁字母也占 2 字节)
  • 文件开头的 BOM 用于识别端序;协议里更推荐明确写 UTF-16BE/LE
  • 正则和 len() 在 JS/Java 里按代码单元计数,一个 emoji 长度是 2

示例

输入:https://www.123wen.cn/?q=测试

编码结果:

UTF-16BE 00 68 00 74 00 74 00 70 00 73 00 3A 00 2F 00 2F 00 77 00 77 00 77 00 2E 00 31 00 32 00 33 00 77 00 65 00 6E 00 2E 00 63 00 6E 00 2F 00 3F 00 71 00 3D 6D 4B 8B D5;UTF-16LE 68 00 74 00 74 00 70 00 73 00 3A 00 2F 00 2F 00 77 00 77 00 77 00 2E 00 31 00 32 00 33 00 77 00 65 00 6E 00 2E 00 63 00 6E 00 2F 00 3F 00 71 00 3D 00 4B 6D D5 8B;带 BOM 的默认 UTF-16(本机/Python 为 LE)FF FE 68 00 74 00 74 00 70 00 73 00 3A 00 2F 00 2F 00 77 00 77 00 77 00 2E 00 31 00 32 00 33 00 77 00 65 00 6E 00 2E 00 63 00 6E 00 2F 00 3F 00 71 00 3D 00 4B 6D D5 8B

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

命令行示例

# 查看 UTF-16 字节
python3 -c "print('中'.encode('utf-16be'), '中'.encode('utf-16le'))"
file -i notes.txt

常见报错

  • UnicodeEncodeError / unpaired surrogate:字符串里有孤立代理项
  • 文件开头出现 ÿþ 或 þÿ:UTF-16 BOM 被按 Latin-1 显示
  • 截取字符串后出现 �:代理对被切断

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

常见问题

【为什么 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 数码开发

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