ASCII码
ASCII的英文全称为American Standard Code for Information Interchange,翻译过来即:美国信息互换标准代码。ANSII是最早的编码方式,主要用于解决计算机对信息的存储与传输,简单来说就是如何用0和1来表述各种字符(这里是拉丁字母)使其能够存储在计算机中。
标准ASCII采用7位二进制组合数来表示128中可能的字符,在计算机的存储中占一个字节。
有几个需要记住的对应关系有
- 0x31👉1
- 0x41👉A
- 0x61👉a
显然这128个字符只满足某些语言的使用,为了使计算机支持更多语言,就需要有新的编码方式,或新的编码进行扩充。因此便有了ANSI码和UTF-x码。下面来介绍ANSI码。
ANSI码
ANSI可以看作是一个集合,包括我们熟知的GBK,GB2312,BIG5等等。
通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,即原有的ASCII码,因此ANSI兼容ASCII码;超出此范围的使用0x80~0xFFFF来编码,即可以使用两个字节位来表示一个字符。
不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GB2312编码;在繁体中文Windows操作系统中,ANSI编码代表Big5。
由于标准不同,很显然,不同的ANSI中同一个二进制数(除去ASCII)表示的字符不同,因此不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。这一点我们需要注意。
我们只需要知道GBK表示中文时为两个字节,并且其向下兼容ASCII码即可。
Unicode
首先,提供一个Unicode字符集网址以供观摩。
Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的映射数字,以满足跨语言、跨平台进行文本转换、处理的要求。
Unicode是国际组织制定的可以容纳世界上所有文字和符号的映射方案。因此又称为万国码、统一码。Unicode用数字0-0x10FFFF(1114112)来映射这些字符。Unicode定义了17个平面(0-16),每个平面有2^16(32768)个码位,因此共有2^16 * 17(1114112)个码位,即最多可以容纳1114112个字符。显然说Unicode字符为两个字节是有大大的问题的。
Unicode只是一种映射方案,当谈到其在计算机内存中的存储时,Unicode码并非字符在内存中的存储映射,这时就需要有编码方案。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。UTF-8、UTF-16、UTF-32就是将映射数字转换到程序数据的编码方案,分别以1字节、2字节、4字节作为编码单位,是可变长的编码方案。
这里我们只需要知道,Unicode只是一种映射方案,对于UTF-8,我们只需要知道中文占3个字节,并且向下兼容ASCII码。
因本人水平有限,如有错误,还望指正。