概述
在平时写代码的处理字符串的过程中,老是碰见乱码的问题,具体原因呢前面的文章我已经解释了,但是还有一部分小的问题没有解决。比如下面的几个问题:
- VS项目属性里面的字符集选择Unicode和多字节字符集的不同
- 写代码时宽字节wchar_t、_T、TCHAR等是啥意思
- 使用不同字符集的字符串之间转换
1、VS项目属性不同字符集的区别
首先介绍一下单字节字符集:顾名思义,单字节字符集就是用一个字节表示一个字符,简称SBCS。ASCII就是单字节字符集。在编码的过程中char类型就是单字节编码。
使用Unicode字符集:前面咱已经介绍什么是Unicode字符集了,不懂的请看前面的文章字符集与字符编码。默认编码是USC-2,即所有的字符都是固定的使用2个字节进行编码。因为比单字节字符宽,所有又叫宽字节编码。宽字节编码有很多,Unicode编码只是宽字节编码中的一种实现方式,其它的比如:USC-4。
使用多字节字符集:指使用多个字节表示一个字符,其实就是ANSI编码。有的字符使用一个字节,如ASCII字符,有的字符使用多个字节表示,如中文。英文名简称MBCS,由于Windows里使用的多字节字符绝大部分是两个字节,所以MBCS常被用**DBCS(双字节字符)**代替。
选择这两者的优缺点比较:
另外Unicode是国际通用的字符集,所以很容易在不同字符集之间进行转换,有利于软件的国际化。
2、wchar_t 、 _T 、TCHAR等含义
wchar_t意思是宽字节,w是Wide(宽)的缩写,所以只有在选择Unicode编码时才能使用。
wchar_t的定义为:typedef unsigned short wchar_t;