UTF-16 是 Unicode 的一种变长编码,编码单元是 16 位:基本多文种平面(BMP,U+0000–U+FFFF)用 2 个字节,辅助平面(U+10000–U+10FFFF,如多数 emoji)用一对代理项共 4 个字节。下面重点说明开发场景下的含义。
UTF-16在开发中是什么
UTF-16 是 Unicode 的一种变长编码,编码单元是 16 位:基本多文种平面(BMP,U+0000–U+FFFF)用 2 个字节,辅助平面(U+10000–U+10FFFF,如多数 emoji)用一对代理项共 4 个字节。Java、JavaScript 字符串以及 Windows 的 WCHAR 在内存中使用 UTF-16。
- BMP 字符:2 字节;辅助平面:代理对 4 字节
- 有大端(BE)和小端(LE)两种字节序
- BOM:FE FF 表示 BE,FF FE 表示 LE
示例
输入:a+b=c
编码结果:
UTF-16BE 00 61 00 2B 00 62 00 3D 00 63;UTF-16LE 61 00 2B 00 62 00 3D 00 63 00;带 BOM 的默认 UTF-16(本机/Python 为 LE)FF FE 61 00 2B 00 62 00 3D 00 63 00
说明:共 10 字节(不含 BOM)。BMP 字符 2 字节,辅助平面 4 字节(代理对)。
常见用途
- Java、JavaScript、.NET、Windows API 的内存表示
- 部分 Office 文档和旧的 Windows 记事本文件
- 部分网络协议(如部分 Windows 系统服务)
怎样核对结果
用 file、编码检测工具或 Python decode 尝试 utf-16le/be,看哪种能得到通顺文本,并检查是否有 BOM。
本站的字符编码检测工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【英文用 UTF-16 浪费空间吗?】每个 ASCII 字符要 2 字节,是 UTF-8 的两倍,所以文本文件更推荐 UTF-8。
【一个汉字在 UTF-16 中占几个字节?】常用汉字位于 BMP,占 2 个字节;生僻字若在扩展区则占 4 个字节。
【如何区分 UTF-16BE 和 LE?】看 BOM:FE FF 是 BE,FF FE 是 LE;没有 BOM 时必须由协议声明。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。