C++中常用的三个转换函数
UnicodeToUtf8
void UnicodeToUtf8(const WCHAR* wideStr, std::string &result)
{
char* utf8Str = NULL;
int charLen = -1;
charLen = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL);
utf8Str = (char*)malloc(charLen + 1);
WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, utf8Str, charLen, NULL, NULL);
result = std::string(utf8Str);
free(utf8Str);
}
UnicodeToANSI
void UnicodeToANSI(const wchar_t *str, std::string &retresult)
{
char * result;
int textlen = 0;
textlen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
result = (char *)malloc((textlen + 1) * sizeof(char));
memset(result, 0, sizeof(char) * (textlen + 1));
WideCharToMultiByte(CP_ACP, 0, str, -1, result, textlen, NULL, NULL);
retresult = std::string(result);
free(result);
}
AnsiToUnicode
wchar_t* AnsiToUnicode(const char* szStr)
{
int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0);
if (nLen == 0)
{
return NULL;
}
wchar_t* pResult = new wchar_t[nLen];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen);
return pResult;
}