Unicode代码点值是否等于每个字符的UTF-16BE表示?

it_*_*ure 2 python unicode utf-16

我以Unicode大端格式(UTF-16BE)保存了Microsoft Agenda中的一些字符串.当我用shell命令打开它xxd来查看二进制值时,将其写下来,并获取Unicode代码点的ord()值以逐字符获取序数值(这是一个python内置函数,它需要一个 -字符Unicode字符串并返回代码点值),并比较它们,我发现它们是相等的.

但我认为Unicode代码点值与UTF-16BE不同 - 一个是代码点; 另一种是编码格式.其中一些是平等的,但也许它们对于某些角色是不同的.

Unicode代码点值是否等于每个字符的UTF-16BE编码表示?

Mar*_*ers 7

不,基本多语种平面之外的代码点使用两个 UTF-16字(所以4个字节).

对于U + 0000到U + D7FF和U + E000到U + FFFF范围内的码点,码点和UTF-16编码一对一映射.

对于U + 10000到U + 10FFFF范围内的码点,使用U + D800到U + DFFF范围内的两个字; 从0xD800到0xDBFF的前导代理和从0xDC00到0xDFFF的跟踪代理.

请参阅UTF-16维基百科有关细节的详细信息.

因此,大多数UTF-16大端字节在打印时可以直接映射到Unicode代码点.对于UTF-16 little-endian,你只需要交换字节.对于从0xD8到0xDF字节开始的UTF-16字,您必须将代理映射到实际代码点.