You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UTF-16字符串转换原理及十六进制长串疑问解析

关于UTF-16编码的疑问解答

首先看你给出的字节串:

b'\x14\xfeh\x00e\x00l\x00l\x00o\x00 \x00w\x00o\x00r\x00l\x00d\x00'

为什么会看到一长串十六进制字符?

你混淆了「十六进制字符的位数」和「编码单元的位数」:

  • 1字节=8位,对应两位十六进制字符(比如0x68就是'h'的ASCII值,两位十六进制)。
  • UTF-16的每个基本编码单元是16位,也就是两个字节,对应四位十六进制字符。

你看到的长串,其实是多个UTF-16字符的字节序列连在一起:比如h\x00是两个字节(0x68和0x00),对应'h'的UTF-16小端编码;e\x00是0x65和0x00,对应'e'的UTF-16小端编码。每个字符占两个字节,所以整个字符串的字节流就是一长串十六进制转义序列。

UTF-16如何转换字符串?

UTF-16的转换逻辑很直接:

  1. 先把字符串里的每个字符映射到Unicode码点(比如'h'对应U+0068,'e'对应U+0065)。
  2. 对于基本多语言平面(U+0000到U+FFFF)的码点,直接转成一个16位的数值。
  3. 把这个16位数值拆成两个字节存储,顺序由字节序决定:
    • 小端(LE):低字节在前,高字节在后。比如U+0068(0x0068)拆成0x68(h)+0x00,就是你看到的h\x00。
    • 大端(BE):高字节在前,低字节在后,会变成\x00h。
  4. 对于超出基本平面的码点(U+10000及以上),UTF-16会用两个16位的「代理单元」组合表示,总共占4个字节。

UTF-16背后的核心理论

UTF-16是Unicode字符集的一种编码实现,核心目标是平衡编码效率和兼容性:

  • Unicode给全球几乎所有字符分配了唯一的数字标识(码点),解决了不同字符集的混乱问题。
  • UTF-16用16位作为基本单元,既能直接覆盖绝大多数常用字符(基本平面),又能通过代理对扩展到所有Unicode码点。
  • 字节序的存在是因为不同硬件系统存储多字节数据的顺序不同,所以需要用字节顺序标记(BOM,比如\xff\xfe表示小端,\xfe\xff表示大端)来告诉解码器如何解析字节流。你给出的字节串开头\x14\xfe不是标准UTF-16 BOM,可能是数据本身的特殊前缀,不影响后面字符的编码逻辑。

内容的提问来源于stack exchange,提问作者user20144486

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:10:33