一,字符集
使用visual studio 进行windows编程时,不可避免会遇到字符集(character set)的问题,VS提供两种字符集,一种是多字节字符集,另一种是unicode字符集。
1,多字节字符集,英文字符占1个字节,一个中文字占2个字节,使用_tcslen计算一个中文的字符长度为2;
2,Unicode字符集,英文字符占2个字节,一个中文占2个字节,使用_tcslen计算一个中文的字符长度为1.
在Unicode中,所有的字符都有一个对应的二进制代码,因此该字符集叫“唯一代码”,每一个符号都给予一个独一无二的编码,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是说,默认的采用unicode编码的字符的存储方式是2字节存储一个字符,这对于英文国家的使用者来说,浪费了一半的空间,因此出现了UTF-8,用来优化存储unicode。
UTF-8是Unicode的实现方式之一,是在unicode基础上细化并优化后的一种长度可变的字符编码方式,也是在互联网上使用最广的一种Unicode的实现方式,除了 UTF-8,还有UTF-16,UTF-32 等都可以实现 Unicode,但是 UTF-8 相对而言是用的最为广泛的。
UTF-8最大的一个特点,就是它是一种变长的编码方式。
它可以使用1至多个字节表示一个符号,根据不同的符号而变化字节长度。
将最早的ASCII编码与Unicode、UTF-8编码对比列举如下:
编码 | 大小 | 支持语言 |
---|---|---|
ASCII | 1个字节 | 英文 |
Unicode | 2个字节(生僻字4个) | 所有语言 |
UTF-8 | 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 | 所有语言 |
ASCII字符集只有127个字符。中国制定了GB2312编码,用来把中文编进去,我认为相当于是扩展了ASCII字符集,对应为多字节字符集。
二,工程中的使用
在用VS 进行windows编程时,为了能兼容两种字符集,最好使用通用的字符类型以及对应的字符处理函数:
使用TCHAR 代替char;
使用LPTSTR(或TCHAR*)代替 char*;
使用_tcs*宏来进行字符串处理。具体见