UTF-16怎样可读地显示

60 0

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

UTF-16怎样可读地显示

encode 返回字节串;decode 返回字符串。Python 的 "utf-16" 会处理 BOM,"utf-16be/le" 则按指定端序且默认不写 BOM。

端序(BE/LE)、是否写 BOM、遇到孤立代理项是报错还是替换。

示例

输入:abc

编码结果:

UTF-16BE 00 61 00 62 00 63;UTF-16LE 61 00 62 00 63 00;带 BOM 的默认 UTF-16(本机/Python 为 LE)FF FE 61 00 62 00 63 00

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

注意事项

  • 把 UTF-16 文件当 UTF-8 打开会出现空格间隔的字母或乱码
  • JS 的 "😀".length === 2,遍历要用 for...of 或 Array.from
  • 不要截断在代理对中间,会得到非法字符
  • Python 的 encode("utf-16") 默认带 BOM,encode("utf-16le") 不带

Python 示例

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

"中".encode("utf-16be")     # b"\x4e\x2d"
"中".encode("utf-16le")     # b"\x2d\x4e"
"中".encode("utf-16")       # 带 BOM:b"\xff\xfe\x2d\x4e"
"😀".encode("utf-16be")    # b"\xd8\x3d\xde\x00"

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

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

常见问题

【如何区分 UTF-16BE 和 LE?】看 BOM:FE FF 是 BE,FF FE 是 LE;没有 BOM 时必须由协议声明。

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

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

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

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

标签: UTF-16 数码开发

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