字符编码准确来说是字符集,分为三种,ASCII,ANSI(多字节字符集),UNICODE(宽字节字符集)。
ASCII:该编码方式为英文编码,有128个字符。
ANSI:为多字节字符集,他是ASCII的扩充,英文通常占1个字节,中文或其他非英文类占2个字节。不同的操作系统中有不同的ANSI编码,例如中文简体win系统中ANSI编码是GB2312编码,中文繁体Win系统中ANSI编码是BIG5编码。
UNICODE:宽字节字符集,它有3中编码方式,UTF-8 ,UTF-16,UTF-32,该字符集是统一码,它为世界上大部分语言都编码了唯一的一个代码,以此区分不同的语言。
到此说明了这些,
在vs中的项目属性中会有字符集的设置例如:
这个是作用目前看是API的选自问题,因为Wind api中有A和W区分的函数,例如:
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif
在代码中输入的字符常量是ANSI编码,例如
char *pTemp = "123中国人";
"123中国人"的编码方式是ANSI编码,这个和属性中的字符集设置没有关系。
如果要把这个字符串常量按Unicode编码,需要加入L,例如:
wchar_t *pTemp=L"123中国人";
_T()和TEXT()这些宏的结果是根据项目属性中字符集设置有关,
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else /* UNICODE */
#define __TEXT(quote) quote
#endif /* UNICODE */
#define TEXT(quote) __TEXT(quote)