UTF-16 是 Unicode 的一种变长编码,编码单元是 16 位:基本多文种平面(BMP,U+0000–U+FFFF)用 2 个字节,辅助平面(U+10000–U+10FFFF,如多数 emoji)用一对代理项共 4 个字节。下面重点说明操作与核对。
UTF-16如何在线计算
本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
- 用本站字符编码检测查看文件是否为 UTF-16 及端序
- 在编辑器中改存为 UTF-8(无 BOM)以便交换
- 在程序里明确指定 utf-16、utf-16be 或 utf-16le,不要依赖默认端序
用 file、编码检测工具或 Python decode 尝试 utf-16le/be,看哪种能得到通顺文本,并检查是否有 BOM。
示例
输入:Hello
编码结果:
UTF-16BE 00 48 00 65 00 6C 00 6C 00 6F;UTF-16LE 48 00 65 00 6C 00 6C 00 6F 00;带 BOM 的默认 UTF-16(本机/Python 为 LE)FF FE 48 00 65 00 6C 00 6C 00 6F 00
说明:共 10 字节(不含 BOM)。BMP 字符 2 字节,辅助平面 4 字节(代理对)。
特殊字符
BOM FE FF(BE)或 FF FE(LE)。零宽字符、emoji(如 😀 的 BE 为 D8 3D DE 00)占 4 字节。
乱码排查
UTF-16LE 英文被当 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。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。