计算机处理的是数字。他们在存储字符时要给每个字符分配一个数值。
早期的编码系统称为 ASCII(美国信息交换标准码), 一共有128(0-127)个值,每个值用7bit 保存。ASCII可以满足小写、大写、数字标点符号和一些控制字符的处理。
人们曾尝试将ASCII字符扩展到8bit,这种新的被称为“扩充ASCII”的编码一直没有成为国际性标准。
为了克服ASCII和扩充ASCII先天上的不足,Unicode Consortiun(多语言软件生产商群体)创建了一种能够提供广泛字符集的通用编码系统,称为“Unicode”。
Unicode最初设置为2Byte的字符集。但版本3的Unicode用的是4Byte编码,并且与ASCII与扩充的ASCII完全兼容。
现在被称为Basic Latin(基本拉丁文)的ASCII字符集就是前25位全部置零的Unicode码。而现在被称为 Latin-1(拉丁文1)的扩充ASCII字符集就是前24位全部置零的Unicode码。
Unicode中的每个字符或符号由一个32bit数来定义,因此这种编码可以定义高达2的32次方(4 294 067 296)个字符或符号。它的记法使用了十六进制数字,格式如下:
U-XXXXXXXX
#每个 X 都是一个十六进制的数字。因此,它的数值从U-00000000到U-FFFFFFFF
美国信息交换码(American Standard Code of Information Internet,ASCII)是一种7bit码,设计来为128个大多数是美国英语里使用的符号提供编码,今天的ASCII码已成为Unicode的一部分,它占据了Unicode中的前128个码(00000000-0000007F)。
ASCII的一些特点:
1,space(20-sp)字符,是一个可打印的字符,打印出一个空格;
2,大写字母从(41-A)开始,小写字母从(61-a)开始。按ASCII比较时,大写字母的数值会小于小写字母;
3,大写字母与小写字母在他们的7bit编码中只有1bit不同,A(1000001),a(1100001),两者相差(20)十六进制;
4,小写字母并没有紧跟在大写字母后面,这两者之间还有几个标点符号(5B-60);
5,数字从(30-0)开始;
6,从(00)到(1F)这最开始的32个字符加上最后一个字符(7F)全都是非打印字符。字符(00)被用作定界符,已定义字符串的结束。字符(7F)是删除字符,它被某些编程语言用来删除前一个字符。剩下的非打印字符称为控制字符,用于数据通信;
UTF-8是Unicode的实现方式之一
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。 UTF-8的编码规则很简单,只有二条: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。