字符:每一个字母、汉字、标点符号、空格、回车、换行等,都是一个字符。

字符集:指字符组成的集合,集合中每个字符都有一个整数的编号。同一个字符在不同的字符集中,它的编号一般是不同。常见的字符集如下。

  • ASCII:英语国家使用到的字符包括英文字母、标点、控制类字符共128个,所以在计算机领域最初的字符集是ASCII。
  • GB2312、GBK、GB18030:中国的汉语除了拼音字母、标点、控制类字符以外,又有很多汉字,针对常用的6763个简体中文汉字、682个全角的非汉字字符,提出了针对中国用的GB2312字符集。随后由于会用到一些非常用的简体汉字、繁体字等,又提出了GBK、GB18030等字符集,包含了更多的汉字。
  • UNICODE:除了英语、汉语,世界上其他国家都有各自的字符集,包含了本国的常用字符。美国开发的软件如果用ASCII字符集,拿到中国直接使用,肯定中文会不能显示,同理,拿个其他国家也是一样的。为了解决这个问题,又提出了UNICODE字符集,又称“万国码”,顾名思义,这个字符集可以说包含了世界上所有国家常用的字符。

字符编码:将一个字符的整数编号用一个什么二进制的整数值来对应并在计算机存储,这就是编码方式。

  • ASCII编码方式:仅用于ASCII字符集,每个字符都使用一个字节,将字符的整数id直接转换为二进制直接存储。
  • GB2312编码方式:仅用于GB2312字符集,汉字使用2个字节存储,非汉字的字符id与ASCII中的相同,使用一个字节存储。
  • UNICODE字符集的编码方式:有多种utf-8,utf-16,utf-32等多种编码方式。其中utf-8编码方式将UNICODE字符集中字符的编号转换为三个字节存储,utf-16则是对UNICODE编码字符集中的前65536个字符编号都不做变换,直接作为计算机存储时使用的值,例如“汉”字的UNICODE编号为0x6C49,那么经过UTF-16编码后存储在计算机上时,它的表示仍为0x6C49,对65536以后的字符,仍然要做变换,变换后为3个字节存储;对于UTF-32编码方案,他对所有的UNICODE字符均不做变换,直接使用编号存储,只是这种编码方案太浪费存储空间(就连1个字节就可以搞定的英文字符,它都必须使用4个字节)。所以,同样的内容采用不同的编码方式,所占用的空间是不同。

结论
ASCII、GB2312、GBK、GB18030这些既是字符集,但由于编码方式唯一,所有通常也代表了相应的编码方式。UNICODE仅仅是万国码字符集,不是编码方式,UNICODE字符集支持utf-8、utf-16、utf-32编码方式,相同的内容使用不用的编码方式,其所占的存储空间是不同。