unicode,ansi編碼轉換

unicode,和ansi編碼轉換主要應用WideCharToMultiByte,MultiByteToWideChar,以下是應用方法
BOOL AnsiToUnicode(LPSTR pszA, LPWSTR* ppszW)
{

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;
}
記得退出之前LocalFree掉這塊內存就ok了.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章