1,编码方式
ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。(占用一个字节,即一个字节表示一个字符)
GBK/GB2312/GB18030:表示汉字。GB2312表示简体中文,GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名,GB18030表示中文,兼容GBK和GB2312。(占用两个字节,即两个字节表示一个字符)
Unicode编码:包含世界上所有的字符,是一个字符集。(占用两个字节,即两个字节表示一个字符)
UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。
2.符串前面加L表示该字符串是Unicode字符串。
_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual
C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
因此,当你在VS2005/VS2008下进行写C++(MFC程序时)最好应用_T;而在VS2010等下直接用L吧!
T和L的区别在于,L不管你是以什么方式编译,一律以UNICODE方式保存。
3.L"hello, world" 这个字符串保存的是wchar的
_T"hello, world" 如果工程定义的UNICDE则这个字符串是按wchar方式保存的,如果没有定义则是按char方式保存的
4.一、在字符串前加一个L作用:
如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。
strlen("asd") = 3;
strlen(L"asd") = 6;
二、
_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(Unicode还是ANSI)字符处理方式
如果你定义了UNICODE,那么_T宏会把字符串前面加一个L。这时 _T("ABCD") 相当于 L"ABCD" ,这是宽字符串。
如果没有定义,那么_T宏不会在字符串前面加那个L,_T("ABCD") 就等价于 "ABCD"