unicode,和ansi编码转换主要应用WideCharToMultiByte,MultiByteToWideChar,以下是应用方法
BOOL AnsiToUnicode(LPSTR pszA, LPWSTR* ppszW)记得退出之前LocalFree掉这块内存就ok了.
{
DWORD cCharacters;
if (NULL == pszA)
{
*ppszW = NULL;
return FALSE;
}
cCharacters = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszA, -1,
0, 0);
*ppszW = (LPWSTR) LocalAlloc(cCharacters*2);//字节长度应该为ANSI的2倍
if (NULL == *ppszW)
return FALSE;
// Unicode转换 -1指定根据'/0'来判断长度,如果'/0'后也需要转换而输入其实际长度
//而输出的unicode长度要为其实际的子串长度,也就是说要WCHAR为单位
if (0 == MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pszA, -1,
*ppszW, cCharacters))
{
LocalFree(*ppszW);
return FALSE;
}
return TRUE;
}
BOOL UnicodeToAnsi(LPWSTR pszW, LPSTR* ppszA)
{
DWORD cCharacters;
if (pszW == NULL)
{
*ppszA = NULL;
return FALSE;
}
cCharacters = WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, pszW, -1,
NULL,NULL, NULL, NULL);
//因为是ansi所以字节数就为其个数
*ppszA = (LPSTR) LocalAlloc(cCharacters);
if (NULL == *ppszA)
return FALSE;
//ansi转换.
if (0 == WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, pszW, -1,
*ppszA,cbAnsi, NULL, NULL))
{
LocalFree(*ppszA);
return FALSE;
}
return TURE;
}