ASCII码
标准ASCII码的长度为1个字节,指定一个字节的低7位来表示128种可能的字符。
包括所有的大写和小写字母,数字0 到9、标点符号等,如大写字母A的编码是65,小写字母z的编码是122。
GB2312
标准的ASCII码只有1个字节,显然无法对中文进行编码,对此,1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。
GB2312是对ASCII码的一个拓展,当存储英文字符时,使用一个字节存储,其大小为0~127。当存储中文字符时,使用两个字节存储,高低位都存放大于127的数字。
当读取高位字节时,若大于127,则认为是中文字符,将读取双字节进行识别,若小于127,则认为是英文字符,单字节识别。另外,GB2313在大于127位的编码库也提供了中文符号的编码,故英文标点符号称做半角符号,中文标点符号称作全角符号。
GBK
1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
Unicode
GB2312和GBK虽然解决了中文编码问题,但全世界有上百种语言,各国有各国的标准,就会不可避免地出现冲突。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
通常情况下,Unicode长度为2个字节,对于生僻字其用4个字节来表示,它将ASCII的长度由8位扩展为16位。
目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8,UTF-16,UTF-32都是将数字转换到程序数据的编码方案。
UTF-8
UTF-8是Unicode的实现方式之一,它对不同范围的字符使用不同长度的编码。
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。