c++ ANSI、UNICODE、UTF8互转

 static std::wstring MBytesToWString(const char* lpcszString);
    
static std::string WStringToMBytes(const wchar_t* lpwcszWString);
    
static std::wstring UTF8ToWString(const char* lpcszString);
    
static std::string WStringToUTF8(const wchar_t* lpwcszWString);

std::wstring KKLogObject::MBytesToWString(const char* lpcszString)
{
    
int len = strlen(lpcszString);
    
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, lpcszString, -1, NULL, 0);
    wchar_t
* pUnicode = new wchar_t[unicodeLen + 1];
    memset(pUnicode, 
0, (unicodeLen + 1* sizeof(wchar_t));
    ::MultiByteToWideChar(CP_ACP, 
0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen);
    wstring wString 
= (wchar_t*)pUnicode;
    delete [] pUnicode;
    
return wString;
}

std::
string KKLogObject::WStringToMBytes(const wchar_t* lpwcszWString)
{
    
char* pElementText;
    
int iTextLen;
    
// wide char to multi char
    iTextLen = ::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, -1, NULL, 0, NULL, NULL);
    pElementText 
= new char[iTextLen + 1];
    memset((
void*)pElementText, 0, (iTextLen + 1* sizeof(char));
    ::WideCharToMultiByte(CP_ACP, 
0, lpwcszWString, 0, pElementText, iTextLen, NULL, NULL);
    std::
string strReturn(pElementText);
    delete [] pElementText;
    
return strReturn;
}

std::wstring KKLogObject::UTF8ToWString(
const char* lpcszString)
{
    
int len = strlen(lpcszString);
    
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, lpcszString, -1, NULL, 0);
    wchar_t
* pUnicode;
    pUnicode 
= new wchar_t[unicodeLen + 1];
    memset((
void*)pUnicode, 0, (unicodeLen + 1* sizeof(wchar_t));
    ::MultiByteToWideChar(CP_UTF8, 
0, lpcszString, -1, (LPWSTR)pUnicode, unicodeLen);
    wstring wstrReturn(pUnicode);
    delete [] pUnicode;
    
return wstrReturn;
}

std::
string KKLogObject::WStringToUTF8(const wchar_t* lpwcszWString)
{
    
char* pElementText;
    
int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, -1, NULL, 0, NULL, NULL);
    pElementText 
= new char[iTextLen + 1];
    memset((
void*)pElementText, 0, (iTextLen + 1* sizeof(char));
    ::WideCharToMultiByte(CP_UTF8, 
0, (LPWSTR)lpwcszWString, -1, pElementText, iTextLen, NULL, NULL);
    std::
string strReturn(pElementText);
    delete [] pElementText;
    
return strReturn;
}
原文地址:https://www.cnblogs.com/hzcya1995/p/13318458.html