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;
}