因为计算机只能处理0和1(即两种状态:高低电平),全部咱们须要将英文字母,数字,特殊符号翻译成计算机认识的0和1,那如何去翻译以及用何种规则去翻译呢,因而聪明的人们发明了一系列编码规则,即字符和数字的对应。最早被发明的是ASCII编码,后来则衍生出了Unicode编码和UTF-8编码。编辑器
世界第一台计算机诞生于美国宾西法尼亚大学,因此最先使用计算机的是美国人,最先的信息交换代码也诞生于美国,即ASCII(America Standard Code for Infomation Interchange,美国信息交换标准代码)。ASCII码实质就是数字和字符的对应关系,好比大写字母"A"所对应的十进制数字为65(为了更易理解咱们以十进制举例,八进制,十六进制同理),而十进制数字65在计算机中表示为01000001,计算机不能存储字符,可是能存储0和1,因此字母“A”在计算机中实际存储为01000001,占8位,即1个字节。其余字符也是一样的道理,各自对应一个十进制数字,可参考ASCII码标准对照表。是否是很简单,可是为什么人们还制定Unicode编码呢?因为ASCII编码是美国标准,所涵盖的字符也只仅仅包含了A-Z,a-z,数字0-9,以及其余的控制字符和一些特殊字符,一共包含127个字符,后来因为计算机普及,这127个符号已经不能知足人们的需求,因而IBM利用128~255位对ASCII码进行了补充,包含了附加符号符号,希腊字母以及制图符号等,这一部分编码则称为扩展ASCII码。
世界上有上百种语言,很显然,标准ASCII码和扩展ASCII码仍然不能知足不一样国家对于编码的需求,好比汉字的“汉”就不能用ASCII码表示,若是在编辑器设置了ASCII编码,在遇到汉字的情景下则会出现乱码,因而中国制定了GB2312编码,日本制定了Shift_JIS编码,可是同一款应用,不一样地区的人使用,就须要包含不一样的编码集合,显然这样作是不明智的,因而Unicode应运而生。Unicode编码一般用2个字节表示,有些偏僻的字符会用到2-4个字节,从而实现一套编码保存全部字符,这样不一样国家,不一样地区就造成了一套统一的编码格式。
仍是拿字符“A”举栗子,“A”对应的ASCII码为01000001,若是将“A”用Unicode编码表示就在前面补0就能够了,0000000001000001,如今咱们也能够用Unicode编码来表示“汉”了,0110110001001001。不难发现,若是用Unicode去编码全部的字符,乱码的问题也就迎刃而解,可是问题也来了,若是一段文字中,既有英文字母,又有汉字,英文字母一样也会用2个字节(16位)来进行表示,这显然会形成存储空间的浪费。那么有没有一种更加通用而且更加节省存储空间的编码呢?固然是有的,聪明的人们发明出了UTF-8编码,UTF-8是一种可变长的编码,为啥叫UTF-8呢,这个8是什么意思呢?8表明一个字节,即8位,但不表明UTF-8用一个字节表示一个字符,而是在UTF-8编码格式下,一个字符所占字节大小变化的最小单位,有点绕,说人话就是因为UTF-8编码下,不一样字符占用空间的大小是可变的,每一个字符多是1个字节,也多是2个或者3个字节。 编码
----- 待更新翻译