ANSI 和Unicode 编码
std::wstring
CCUtf8ToUnicode(const
char * pszUtf8Str,
unsigned len/* = -1*/)
{
std::wstring
ret;
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::string
CCUnicodeToUtf8(const
wchar_t* pwszStr)
{
std::string
ret;
do
{
if(!
pwszStr) break;
size_t len
= wcslen(pwszStr);
if (len
<= 0)
break;
size_t convertedChars
= 0;
char *
pszUtf8Str = new
char[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;
}