先来说说字符集与编码吧。
- 最早的是ASCII码,范围是0x00-0x7F,事实上的国际标准。
- 然后是ANSI字符集,也叫多字节字符系统,包括了中国大陆的GB2312,GBK,台湾的BIG5等。其中GB2312采用了两个字节编码,范围是0xA1A1-0xFEFE。由于GB2312避开了ASCII的字符范围,因此可以兼容ASCII字符,另外,GB2312中也包括拉丁字母和阿拉伯数字,但他们是全角的,以和ASCII中的半角字符相区分。
- 后来有了UNICODE字符集,可以将全世界的几乎所有字符都编进去。Unicode字符集有多种编码形式,如UTF-8,UTF-16,UTF-32等。
其实UNICODE不能等同于UTF-16,但由于Windows下面的UNICODE只能是两位,因此和UTF-16的编码值是一样的。
在windows下,
char str[] = "中文"; //此时用的是ANSI字符集
而
wchar_t str[] = "中文"; //此时用的是UNICODE字符集
一般来说,不会用wchar_t来存储ANSI字符集,因为ANSI字符集的大小是不定的,用wchar_t来存储的话更不方便。
参考:
[1]http://tools.jb51.net/table/gb2312
[2]http://blog.csdn.net/liyangbing315/article/details/5616643
[3]http://blog.sina.com.cn/s/blog_4d25c9870100epc1.html