首先澄清一个概念 ASCII,ANSI标准和Unicode是一种编码,何为编码,编码的意思是为一个字符规定一个对象的数值,例如A的ASCII编码数值和Unicode数值肯定不同。至于编码对应的数值怎么存储,就不是编码所规定的范畴了。ASCII编码为0X00-0x7F Unicode从0x0000-0xFFFF,注意unicode的物理存储不一定对应一个字节哦,例如utf-8。
ANSI 美国国家标准协会,也就是说,每个国家(非拉丁语系国家)自己制定自己的文字的编码规则,并得到了ANSI认可,换句话说就是不同国家地区的ANSI编码数值是不同的。中国的ANSI编码和在日本的ANSI的意思是不一样的,中国一般是GBK,日本是JIT,香港、台湾一般是Big5。所以基于ANSI标准的语言编码,在逻辑上需要的字符数就显得不一定了,可能是一个,可能是两个,可能是三个。
搞懂了ANSI的含义,我们发现ANSI有个致命的缺陷,就是每个标准是各自为阵的,不保证能兼容。换句话说,要同时显示中文和日本文或者阿拉伯文,就完全可能会出现一个编码两个字符集里面都有对应,不知道该显示哪一个的问题,也就是编码重叠的问题。显然这样的方案不好,所以Unicode才会出现。
SBCS Single Byte Code set 意思是一个单字符字符集
MBCS 多字符字符集合,多字节字符系统或者字符集,基于ANSI编码的原理上,对一个字符的表示实际上无法确定他需要占用几个字节的,只能从编码本身来区分和解释。因此计算机在存储的时候,就是采用多字节存储的形式。也就是你需要几个字节我给你放。
DBCS 双字符字符集
可以参考这个哥们写个一片文章不错:
http://blog.csdn.net/softman11/article/details/6124345
http://ycwangshuai2008.blog.163.com/blog/static/5066933120108182453397/