c++ ANSI、UNICODE、UTF8互转

来源:互联网 发布:淘宝网购物男装外套 编辑:程序博客网 时间:2024/05/01 13:23
 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;
}
0 0
原创粉丝点击