UTF-8

  • unicode是一个字符集,将所有的不同的字符使用同一集合纳入其中,以统一形式表示。可以简单的将其理解为一个大型字典,其中包含的是一个字符对应的一个码点(数值),二者之间存在着映射的关系。

  • utf-8是一种编码的形式,可以将其理解为unicode的实现形式之一,类似的还有utf-16、utf-32等等。utf-8的最大特点是可变长编码,它的编码形式可以解决之前编码问题中的两大痛点:

    Q1:如何能够正确判断多字符的编码形式代表的是一个长字符还是多个短字符呢?

    Q2:如果使用定长编码来代表所有字符,虽然可以解决第一个痛点,但是由于对于单字符或者多字符的字符编码长度相同,针对单字符的编码就造成了存储空间的大量浪费,又如何解决该问题?

  • utf-8的具体编码方式
    1、对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 utf-8是完全可以兼容ASCII的。

2、对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。

0xxxxxxx    # 单个字符
110xxxxx 10xxxxxx   # 两个字符
1110xxxx 10xxxxxx 10xxxxxx  # 三个字符

具体拿个例子来说:
“汉”的 Unicode 码点是 0x6c49(110 1100 0100 1001),通过上面的对照表可以发现,需要对两个字符长度进行编码,那么得出其格式为 1110xxxx 10xxxxxx 10xxxxxx。接着,从“汉”的二进制数最后一位开始,从后向前依次填充对应格式中的 x,多出的 x 用 0 补上。这样,就得到了“汉”的 UTF-8 编码为 11100110 10110001 10001001。在这里我用一个更为直观的图片来解释其过程:
在这里插入图片描述

彻底弄懂unicode编码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值