ASCII,Unicode 和 UTF-8

x33g5p2x  于2022-03-01 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(176)

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

相关文章