编码知识
一、Unicode与多字节
(1)Windows中,Unicode也称为宽字节,多字节也称为窄字节; VS中默认使用Unicode编码,在项目属性>>配置属性>>常规>>字符集中可选择Unicode字符集或者多字节字符集
(2) Unicode与多字节函数版本、字符、字符串类型的区别
Win32 API中大部分参数有字符串的函数都有两个版本
以A结尾,代表多字节版本 | 以W结尾,代表Unicode版本 | 根据版本自动选择的 |
---|---|---|
如:CreateEventA | 如:CreateEventW | 如:CreateEvent |
C运行库也有很多类似的函数
多字节版本 | Unicode版本 | 自适应版本 |
---|---|---|
strcpy | wcscpy | _tcscpy |
strcat | wcscat | _tscscat |
strlen | wcslen | _tcslen |
函数有两种,所以字符也有两种
多字节字符 | Unicode字符 | 自适应字符 |
---|---|---|
char | wchar_t | TCHAR |
(3) 常见Win32字符串类型
LPSTR、LPWSTR、LPTSTR、LPCTSTR
LP前缀,代表指针;STR后缀代表字符串
LPSTR:代表多字节
LPWSTR:代表Unicode
LPTSTR:T自适应
LPCTSTR:C代表const+T代表自适应
备注:变量类型使用自适应类型后如LPTSTR,相关字符串需要用TEXT()进行包裹
const char* str = "hello";
const wchar_t* wstr = L"hello";
const TCHAR* tstr = TEXT("hello");
(4)关于_T()
#ifdef _UNICODE
#define _T(X) L ## X //Unicode版本
#endif
#ifndef _UNICODE
#define _T(X) X //多字节版本
#endif
(5)Unicode与多字节的选择
1.Unicode程序环境适应能力强,不会出现乱码问题
2.Unicode程序运行速度比多字节程序快。原因:Windows内部都是使用Unicode编码,多字节函数会将参数转码后交给Unicode函数
3.控制后台可使用多字节,GUI程序最好使用Unicode