编码的前世今生
最早的字符编码集是ascii,由一个字节表示,只用低7位。
之后又扩展了超过128个字符集由各个厂家推出,称为OEM字符集,标准繁多,不通用。但对于超过128字符的多字符编码集来说就不适用了。
多字符集以常见的中文字符集来说,GB2312属于双字节字符集编码(DBCS,Double Byte Character Set),涵盖了所有简体中文及一些其他符号;
GBK在GB2312的基础上加入了对繁体字的支持,这两个字符集都是以1到2两字节来表示。
不同ASCII衍生字符集的出现,让文档交流变得非常困难,因此各种组织都陆续进行了标准化流程。例如美国ANSI组织制定了ANSI标准字符编码(注意,我们现在通常说到ANSI编码,通常指的是平台的默认编码,例如英文操作系统中是ISO-8859-1,中文系统是GBK),ISO组织制定的各种ISO标准字符编码,还有各国也会制定一些国家标准字符集,例如中国的GBK,GB2312和GB18030。
虽然通过使用不同字符集,我们可以在一台机器上查阅不同语言的文档,但是我们仍然无法解决一个问题:在一份文档中显示所有字符。为了解决这个问题,我们需要一个全人类达成共识的巨大的字符集,这就是Unicode字符集。
Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码(Code Point)。Unicode字符集将所有字符按照使用上的频繁度划分为17个层面(Plane),每个层面上有216=65536个字符码空间。
关于编码的知识,可见https://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html
说点关键的
关于utf-8包含gb2312并不是说字符码就完全完全相等,因为utf-8使用变长字节编码,而gb2312始终使用两个字节来编码,只能说他们都包含某个汉字,但他们的字符码可能是不等。