utf-8格式、utf-16格式

utf-8的格式如下

 

注意:x代表0或1的数值。范围字段是以16进制,编码形式字段是以2进制给出

 

范围                                        编码形式

0x00000000-0x0000007F     0xxxxxxx

0x00000080-0x000007FF     110xxxxx,10xxxxxx

0x00000800-0x0000FFFF     1110xxxx,10xxxxxx,10xxxxxx

0x00010000-0x0010FFFF     11110xxx,10xxxxxx,10xxxxxx,10xxxxxx

 

 

utf-16的格式如下

 

范围                                        编码形式

0x00000000-0x0000FFFF      xxxxxxxx,xxxxxxxx

0x00010000-0x0010FFFF      110110xx,xxxxxxxx,110111xx,xxxxxxxx

 

0x00010000-0x0010FFFF范围是将字符原始表示减去0x00010000再进行编码,使用了0xD800,0xDC00做为代理,将前一步得到的结果的高10bit和低10bit分别与0xD800和0xDC00进行或运算,得到高字,和低字,最后拼接起来。

 

为了能够在一堆都是用两个字节表示的utf-16的字符中能够识别4个字节的utf-16的字符,我们规定如果看到两个字节的值在0xD800-0xDCFF之间,我们就认为这两个字节和后面两个字节才能构成一个字符。这样的话,我们把2字节的utf-16的0xD800-0xDCFF区域专门用作代理了,这也是代理的的由来。这个区域中的含义如下:

 

0xD800-0xDB7F是高位替代

0xDB80-0xDBFF是高位专用替代

0xDC00-0xDCFF是低位替代

 

其中高位专用替代是专门用来表示0xf0000-0x10ffff范围的字符,也就是平面15和平面16,也成为专用区,所以这个高位成为高位专用替代

 

而utf中有大尾序和小尾序之分,也称为大端序和小端序。

大尾序中高字节放在低地址(前面),低字节放放到高地址(后面)

 

假如得到的结果是0xD950 0xDF21:

大尾序中:         0xD950 0xDF21

小尾序中:         0x50D9 0x21DF

 

这里主要是如果你是将utf16编码的字符写到一个字节缓冲区中,需要注意大小端序。

如果是保存在wchar_t数组中则无需调换高字节和低字节的顺序。

 

另外我们说的ucs2是utf-16的子集,是utf-16中除去四字节编码的那块部分的编码方案。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值