我以Unicode大端格式(UTF-16BE)在Microsoft Agenda中保存了一些字符串。当我使用shell命令xxd
打开它以查看二进制值时,将其写下来,并通过ord()
获取Unicode代码点的值,以逐字符获取序数值(这是一个python内置函数,它接受一个字符的Unicode字符串并返回代码点值),并比较它们,我发现它们是相等的。
但我认为Unicode代码点值与UTF-16BE不同 - 一个是代码点;另一种是编码格式。其中一些是平等的,但也许它们对于某些角色是不同的。
Unicode代码点值是否等于每个字符的UTF-16BE编码表示?
答案 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字,您必须将代理映射到实际代码点。