Unicode和UTF8的关系

Unicode是啥?

Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号一般写成16进制。Unicode就相当于一张表,建立了字符与编号之间的联系。

UTF8,UTF16,UTF32是啥?

Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号怎么存储。编号就通过“UTF-8,UTF-16,UTF-32”对应到二进制进行存储。

UTF-32

这是三个当中最简单的,就是字符的Unicode所对应的二进制形式,一个符号4个字节。比如马的Unicode为:U+9A9C,那么直接转化为二进制,它就表示为1001 1010 0110 1100。需要说明是的是转化成二进制之后计算机的存储问题。主要有两种方式:大端法和小端法。大端法就是讲高位字节放到底地址处。如果不分大小端的话,会造成解读错误。

UTF-16

UTF-32和UTF-16就明显的不一样了。UTF-16使用变长字节表示
①当编号在U+0000-U+FFFF之间的字符(常用字符集),直接用两位字节表示
②编号在U+10000到U+10FFFF之间的字符,就需要用四位字节表示了。
同样,这个也需要区分大小端。

UTF-8

UTF-8是根据Unicode编号的大小来使用从1-4不等的字节数,当然,Unicode的编号越小,所用的字节就少。
UTF-8的编码规则:
①对于单字节的符号,字节的第一位设为0,后面的7位为这个符号的Unocode码,因此对于英文字母,UTF-8编码和ASCII码是一样的。
②对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1设为0,后面字节的前两位一律设为10,剩下的没有提及的二进制位,全部为这个符号的Unicode码。
举个例子:
比如说一个字符的Unicode码是130,显然按照UTF-8的规则,这个需要两个字节(一个字节8个比特,两个字节16个比特)第一个字节的前2位设为1,第3位设为0,则第一个字节为:110X XXXX,后面字节的前两位一律设为因为后面只剩下一字节,所以后面的字节为:10XX XXXX,所以它的格式为:110X XXXX 10XX XXXX。

Unicode和UTF-32、UTF-16、UTF-8的关系。

本质上,UTF-32、UTF-16、UTF-8都是Unicode的一种实现。

(来源:本文参考了zhusongziye博主的“你真懂Unicode和UTF-8是什么关系吗?来看看这个彻底懂了!”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值