ASCII, Unicode, UTF-8, 8进制, 16进制等各类编码学习理解笔记

字符编码的发展历史

Unicode和UTF-8有何区别?javascript

在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要归纳一番。java

一个字节:最初一个字节的标准是混乱的,出现过4位、6位、7位的一字节标准,最终因为历史缘由和物理存储需求(8位是2的3次方,方便物理存储),因此采用了8位为一个字节的标准。算法

ASCII:定下了8位为一个字节后,那么一个字节能够表示的状态就有256种(2^8),对应0-255号。接下来就须要考虑8位如何表示一个字符了,ASCII码顾名思义(American Standard Code for Information Interchange)就是美国的信息交换标准码,所以只须要表示出英文字母和少数的标点符号以及操做控制符号便可,因而人们把这些须要编码的字符编到了0-127号(包括127),这种编码方式就是ASCII码。后来为了知足更多地区的字符编码的需求,127号以后的位置也被编码了字符,包含了127号以后的ASCII码被称为扩展ASCII码网络

GB2312等: 可是一个字节最多只能编码256个字符,对于世界上的语言字符来讲远远不够,好比中文的汉字就有许许多多,所以中国采用了GB2312GBKGB18030等双字节字符集(DBCS)的编码方案,还有各个地区和语言采用了各自的编码方案,编码方案不统一的问题就形成了很大的困扰。编码

Unicode:面对这种困扰的局面,国际标准化组织(ISO)决定来解决这个问题,他们作了一个包含了地球上全部文化、字母、符号的编码方案Unicode,而且统一采用双字节,对于原来的单字节的符号,低位编码不变,扩展其高位为0变为双字节符号,这样就解决了标准与统一的问题。设计

可是Unicode也有一些问题,一是计算机如何区分编码为Unicode字符仍是两个ASCII字符,二是半角符号(就是原来的ASCII方案里的一字节字符)只占用了一个字节的空间,Unicode占用了双倍的空间,对于英文字母等半角字符来讲,直接多占用了一倍的空间,这是极大的浪费。所以,Unicode在很长的一段时间内难以推广。code

UTF:直到后来UTF(UCS Transfer Format)标准的出现,Unicode才获得更好的使用。UTF是一种字符在网络上的传输方案,专为数据传输而设计,UTF-16就是一次传输16位的数据,UTF-8就是一次传输8位的数据。其中UTF-8是使用最广的一种Unicode的实现方式,它的一大特色就是它是一种变长度的编码方式,当字符在ASCII码范围内是,使用一个字节表明一个字符,字符在别的范围内时,又是另外的长度,好比中文使用三个字节的长度。UTF-8经过一些算法和规则来实现Unicode的转换。orm

而在javascript中,\u表示使用Unicode编码,好比\u0078表示字符x,\x表示使用16进制的ASCII码,好比\x78也表示x,\[0-7][0-7][0-7]表示使用8进制的ASCII吗,好比\170表示x。ip

总结:

编码方案最初为ASCII码,且只用了0-127号,后来因为须要使用更多字符的缘由,发展为扩展ASCII码,以后因为各个地区和语言的不一样,出现了许多编码标准,好比中国的GB2312等。面临这种局面,ISO制定了Unicode来实现编码的统一,因为Unicode的一些缺点,没有获得更大的推广。直到UTF,尤为是UTF-8这些传输方案的出现,Unicode获得了大范围的使用。get

另外在Javascript中,\u表示使用Unicode编码,[0-7][0-7][0-7]表示使用8进制的ASCII码,\x表示使用16进制的ASCII码。

相关文章
相关标签/搜索