本篇博客参考的是:ASCII,Unicode 和 UTF-8
一、ASCll码
我们都知道一个字节有8位,转换为二进制的话,可以表示256个数,也就是从00000000
到11111111
。ASCll码
一共规定了128个字符的编码,比如空格space
是32(二进制为0010000),大写的字母A
是65。这128个符号还包含着32个不能打印出来的控制符号。只占用了一个字节后面的7位,最前面的一位统一规定为0
。
二、非ASCll码
我们知道前面的128个编码都是一定的,但是其他国家依然存在一些其他的字母,此时使用的是128 - 255
号位来进行编码,此时就需要其他的编码形式。
三、Unicode
如果每一个国家都使用不同的编码形式,此时就会出现乱码的问题,比如说我们发送一个电子邮件,在发送方使用一种编码方式,然而在接受方使用另一种编码方式,此时就会出现乱码的问题。Unicode编码就可以解决乱码的问题,Unicode编码可以编码100w个字符,所以包含着所有国家的字符。
四、Unicode出现的问题
unicode编码存在一些问题,比如说汉字严
的unicode编码为4E25
,转化为二进制代码足足有15个比特位来保存,当然对于更大的字符,可以使用三个字节或者四个字节来保存。此时我们如何来区分unicode
和ascll
?因为对于一个unicode
我们可以将其看做两个,三个或者四个ascll
编码。我们此时如何区分呢?如果我们将全部的编码按照最大位数来进行编码,则对于ascll
的前面几个字节都是0,造成资源浪费。
五、UTF-8UTF-8
是Unicode
的实现方案之一,当然不止这一个,例如UTF-16
(字符使用两个字节或者四个字节表示),UTF-32
(字符使用四个字节表示)。相比于UTF-16
和UTF-32
来说,UTF-8
是一种边长的编码方式,即可以表示的字节范围是:一个字节到四个字节。UTF-8
编码规范:1、对于ASCll编码使用一个字节来表示,并且首位为0
,比如说a
的UTF-8
的编码为01100001
。2、对于非ASCll编码使用多个字节来表示,并且第一位的(从左向右数)开头几个1,表示几个字节,并且剩余的字节都以10开头。
举一个例子:严
的Unicode是4E25
(100111000100101),4E25
需要三个字节保存,所以开始位置为1110xxxx 10xxxxxx 10xxxxxx
,然后从后往前开始,依次将100111000100101
填入其中,所以最终严
对应的UTF-8
的值表示为:11100100 10111000 10100101
,十六进制为:E4B8A5
。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123131455
内容来源于网络,如有侵权,请联系作者删除!