【字符编码系列之五】Unicode实现之UTF-16详解

历史

Unicode标准规定U+D800~U+DFFF的值不对应于任何字符。之所以这样做,是为了UTF-16。


一开始的时候,Unicode是被设计成用固定的16位来表示代码点的。那时也被称作UCS-2时代。很自然,这些代码点上的值就直接不经过任何变换,直接作为UTF-16的编码了。后来,人们发现两个字节不足以表达世界上所有的书写系统,所以Unicode又被扩充为了4个字节,但是实际上只用了21位。也就是0x0000~0x10FFFF。此时,进入了UCS-4时代。


UTF-16

这时,如果还想继续使用UTF-16表达除了BMP平面之外的字符,就要进行一些改进了。之就引入了代理对的概念。引入代理对,是为了表示BMP平面之外的字符,也就是0x10000~0x10FFFF上的字符。对于表示BMP平面上的字符,UTF-16还是使用2个字节,对于表示BMP平面之外的字符,则使用4个字节。顾名思义,UTF-16是以16位递增的,2字节,4字节。

1.对于BMP平面上的字符,其代码点的值就是其UTF-16的值,此时字符占用2个字节;
2.对于BMP平面之外的字符,要用代理对儿,进行转换即可,此时字符占用4个字节。


代理对

下面我们来看一下什么是代理对。这就要用到前面讲到的保留区U+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值