windows编程中的字符串与编码(C++)
在VS中,有两种字符集可选:MBCS(多字节字符集)和Unicode
1.存储字符(串)的类型
C++内置类型:
对于char类型,每个字符用1字节存储。(8位)
对于wchar_t(等同于WCHAR),每个字符用2字节存储。(16位)
char16_t,char32_t同理,并且C++20还引入了char8_t
<tchar.h>
在该头文件里,定义了TCHAR类型。当设置字符集为Unicode时,等同于wchar_t,否则就等同于char
<winnt.h>
在该头文件里,定义了LPSTR,LPTSTR,LPWSTR等类型,LP含义即是长指针(long pointer),T的含义与前述类似,取决于是否设置了字符集为Unicode,W的含义即宽字符。
也就是说,LPSTR等同于char*,设置了Unicode字符集时,LPTSTR等同于wchar_t*,否则等同于char*,而LPWSTR等同于wchar_t*
2.前缀与宏的使用
对字符串使用L前缀,可以指定其中的每个字符用宽字符类型来存储(一个字符占两位,所以让宽字符串指针指向一个字符串str的时候,要为str加上L前缀)
在<tchar.h>中,定义了宏_T和_TEXT,如果使用Unicode字符集,他们的作用等同于L前缀,否则无任何效果。
3.相关的函数
对于宽字符串应使用wcout或者wprintf。需要打印中文时,先使用setlocale设置本地环境