刚开始 接触字符集的时候,只知道有两种字符集:
(1)多字节(mbcs)
(2)Unicode
对着这两种字符集也只是知道,并不知道其真正的区别。
工作之后,总是遇到这种字符集和字符编码的概念。
总是在想这种字符集下的字符在内存中是怎样存储的。
但是就是弄不清楚这种关系,于是带着疑问去寻找答案。
首先不管是多字节还是unicode 字符集,他们都是值得一个字符集合,
这个集合中规定了含有那些字符和文字。
但他们并不能确定在内存中的存储格式(指的是占用几个字节)
而编码格式则表示了一种字符集中字符对应在内存中的存储格式。
有时,字符集也指编码格式
比如GB2312 、gbk、gb18030既是字符集也是编码格式(他们都属于多字节范畴)
他们在内存中都属于变长存储。也就是说ascii码占用一个字节,其他的占用至少2个字节
同样UNicode对用多种编码格式,通常用的是utf16 和utf8两种
utf16所有的字符都用两个字节存储
而utf8也属于变长存储,1~4字节不等。
总而言之,就是字符集就是所有字符的集合,与存储方式无关。
而编码格式才与存储方式有关。
这里顺便说下:
我们通常使用的操作系统,如果使用的是简体中文版,那么采用的字符集是GB2312
这样在界面上显示的所有文字采用的编码格式也都是gb2312(多字节)。
但我们用mfc 创建工程时,选择使用UNICODE字符集,那界面上的文字编码还是GB2312吗?
答案是确定的,只不过在我们调用微软提供的API,他们应该自动做了转换(转换为utf16编码)
如有不正确的地方,烦请批评指正。