最早的字符集是ASCII,它用一个字节的后7位来表示字母、数字、标点和其他常用字符,所以共有0-127个字符;后来又把第一位用上用来表示其他特殊的字符,这样就可以表示0-255个字符,这称为ASCII扩展字符集。
后来由于其他国家使用的的文字个数远超过使用英语国家的这些256个字符,所以为了支持本国语言在计算机上显示,不同国家开发出了不同的字符集,比如中国大陆一开始使用GB2312,后来扩展成了GBK(完全兼容GB2312),后来又扩展成了GB18030(支持少数民族语言)。而香港、台湾地区使用BIG5,日本使用Shift_JIS字符集。
ANSI标准字符集,即各语言使用的标准化的字符集,比如英文的ANSI字符集是指ASCII,简体中文的ANSI字符集指GBK、日文是Shift_JIS。
而MBCS(multi-byte character set)是多字节字符集的意思,他不是指某个具体的字符集,而是符合这种编码方式的字符集的统称,如GB2312、GBK、BIG5等都属于MBCS,即多字节字符集。由于最常见的还是用两个字节来表示一个字符所以又有了DBCS(double byte character set)也就是是双字节字符集这个统称。
再后来又出现了unicode,它规定了全球不同国家都可以统一使用的字符集,即所有国家的语言都按照一种编码方式来组织。实际上UNICODE也是一种统称,其具体实现方式又可以分为UTF-8,UTF-16,UTF-32等,而前两种是最通用的字符集。
UTF-8使用1-6个字节来存储一个字符,比如使用1个字节来存储英文字符,使用2个字符来存储拉丁文,使用3个字符来存储大部分汉字。互联网上基本上都使用UTF-8字符集。
UTF-16使用2或4个字节来存储一个字符,其大部分字符使用2个字节存储就可以了。现在如果说UNICODE字符集一般是指UTF-16字符集。在windows API中,UTF-16被仅以2个字节来存储,因为这两个字节可以表示大部分的字符,比如sizeof(wchar_t)的大小为2,而在linux上的UTF-16是以4个字节存储的,一个wchar_t占4个字节。
右键点击windows的CMD命令行程序的属性可以看到其使用的GBK,而linux的GCC中默认使用的是UTF-8编码。
原文:http://www.cnblogs.com/milanleon/p/5196839.html