UNF-8 和Unicode 编码

 
std::wstringCCUtf8ToUnicode(constchar * pszUtf8Str,unsigned len/* = -1*/)
{
    std::wstringret;
    do
    {
        if (!pszUtf8Str) break;
// get UTF8 string length
if (-1== len)
{
len = strlen(pszUtf8Str);
}
        if (len<= 0) break;

// get UTF16 string length
int wLen= MultiByteToWideChar(CP_UTF8,0, pszUtf8Str,len, 0,0);
if (0== wLen || 0xFFFD == wLen)break;

// convert string 
        wchar_t * pwszStr = new wchar_t[wLen+ 1];
        if (!pwszStr) break;
        pwszStr[wLen]= 0;
        MultiByteToWideChar(CP_UTF8,0, pszUtf8Str,len, pwszStr,wLen + 1);
        ret =pwszStr;
        CC_SAFE_DELETE_ARRAY(pwszStr);
    } while(0);
    return ret;
}

std::stringCCUnicodeToUtf8(constwchar_t* pwszStr)
{
std::stringret;
do
{
if(!pwszStr) break;
size_t len= wcslen(pwszStr);
if (len<= 0) break;

size_t convertedChars= 0;
char *pszUtf8Str = newchar[len*3+ 1];
WideCharToMultiByte(CP_UTF8,0, pwszStr,len+1,pszUtf8Str, len*3+ 1, 0, 0);
ret = pszUtf8Str;
CC_SAFE_DELETE_ARRAY(pszUtf8Str);
}while(0);

return ret;
}
posted @ 2012-09-24 21:40  sinian  阅读(368)  评论(0编辑  收藏  举报