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

时间:2014-04-04 14:10:39

标签: python unicode utf-16

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

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

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

1 个答案:

答案 0 :(得分:6)

不,基本多语种平面之外的代码点使用两个 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 Wikipedia article

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