1、UTF-16将每个字符编码为2个字节,UTF-16能改进性能和减少内存消耗,Windows默认采用UTF-16编码;
2、UTF-8 值在0x0080以下的字符压缩为1个字节,0x0080和0x07FF之间的字符转换为2个字节,0x0800以上的都转换为3个字节,对0x0800以上的字符编码时,不如UTF-16高效;
3、UTF-32将每个字符都编码为4个字节。
4、typedef char CHAR ; //8 bit
typedef wchar_t WCHAR ; //16bit
5、C运行库中strlen是一个能返回ANSI字符串长度的函数,wcslen能返回UNICODE字符串的长度。一般系统会通过UNICODE宏控制调用哪个函数,
#ifdef _UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif
6、使用安全字符串函数,_tcscpy_s , _tcscat_s ;
errno_t _tcscat_s( PTSTR strDestination, size_t numberOfcharacters, PCTSTR strSource )
errno_t _tcscpy_s( PTSTR strDestination, size_t numberOfcharacters, PCTSTR strSource )
numberOfcharacters使用_countof宏计算。
VOID UserSafeString( VOID )
{
TCHAR szDest[MAX_PATH];
TCHAR pSrc[] = L"123456789";
_tcscpy_s(szDest,_countof( pSrc), pSrc);
_tprintf( TEXT("MyName = %s\n"), pSrc);
}
_countof宏后面必须是数组名,如果是指向常量字符串的指针,那么_countof宏会报错,该宏定义分别定义了在C环境下和C++环境下不同的处理方式。
7、StringCchCat(Ex) StringCchCopy(Ex) StringCchPrintf(Ex) 传入的字符数,即_countof
StringCbCat(Ex) StringCbCopy(Ex) StringCbPrintf(Ex) 传入字节数,通常是 sizeof。
8、int MultiByteToWideChar将多字节转换为宽字符 int WideCharToMultiByte 将宽字符转换为多字符