VC++编程中的字符集问题

一,字符集

使用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个字节 所有语言
上图转自https://blog.csdn.net/weiwenjuan0923/article/details/52713387

ASCII字符集只有127个字符。中国制定了GB2312编码,用来把中文编进去,我认为相当于是扩展了ASCII字符集,对应为多字节字符集。


二,工程中的使用

在用VS 进行windows编程时,为了能兼容两种字符集,最好使用通用的字符类型以及对应的字符处理函数:

使用TCHAR 代替char;

使用LPTSTR(或TCHAR*)代替 char*;

使用_tcs*宏来进行字符串处理。具体见 

ANSI和UNICODE字符串处理函数

猜你喜欢

转载自blog.csdn.net/zhushentian/article/details/80801179
今日推荐