Unicode和UTF-8浅析和转换

Unicode

是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0xFFFF,每组称为平面(Plane),而每平面拥有65536(2^16)个码位,共1114112(65536*17)个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

UTF-8

(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,由Ken Thompson于1992年创建。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。

UTF-8编码规则:

如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。UTF-8转换表表示如下:

Unicode/UCS-4bit数UTF-8byte数备注
0000 ~007F0~70XXX XXXX1如果只有一个字节则其最高二进制位为0
0080 ~07FF8~11110X XXXX
10XX XXXX
2
0800 ~FFFF12~161110 XXXX
10XX XXXX
10XX XXXX
3基本定义范围:0~FFFF
1 0000 ~1F FFFF17~211111 0XXX
10XX XXXX
10XX XXXX
10XX XXXX
4Unicode6.1定义范围:0~10 FFFF
20 0000 ~3FF FFFF22~261111 10XX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
5
400 0000 ~7FFF FFFF27~311111 110X
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
10XX XXXX
6

说明:20 0000 ~3FF FFFF和400 0000 ~7FFF FFFF对应的行非unicode编码范围,属于UCS-4 编码早期的规范UTF-8可以到达6字节序列,可以覆盖到31位元(通用字符集原来的极限)。尽管如此,2003年11月UTF-8 被 RFC 3629 重新规范,只能使用原来Unicode定义的区域, U+0000到U+10FFFF。根据规范,这些字节值将无法出现在合法 UTF-8序列中。

转换举例:

UNICODE uCA(1100 1010) 编码成UTF-8将需要2个字节:

过程如下:

uCA(1100 1010)处于0080 ~07FF之间,从上文中的转换表可知对其编码需要2bytes,即两个字节,
对应 UTF-8格式为: 110X XXXX10XX XXXX。从此格式中可以看到,对其编码还需要11位,而uCA(1100 1010)仅有8位,这时需要在其二进制数前补0凑成11位: 000 1100 1010, 依次填入110X XXXX 10XX XXXX的空位中, 即得
1100 0011 1000 1010(C3 8A)。

UNICODE uF03F (1111 0000 0011 1111) 编码成UTF-8将需要3个字节:

uF03F 处于0800~FFFF之间,从上文中的转换表可知对其编码需要3bytes,即三个字节,对应格式为:1110 XXXX 10XX XXXX 10XX XXXX,编码还需要16位,将1111 0000 0011 1111(F03F)依次填入,可得:
1110 1111 1000 0000 1011 1111(EF 80 BF)。
结果:

Unicode 16进制Unicode 2进制bit数UTF-8 2进制UTF-8 16进制
CA1100 101081100 0011 1000 1010C3 8A
F0 3F1111 0000 0011 1111161110 1111 1000 0000 1011 1111EF 80 BF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值