/*
*Unicode转换成UTF-8
*@param strUnicode: 待转换的CString
*@param szUtf8:转换后的UTF-8
*@return:返回UTF-8格式的长度
*/
int UniToUTF8( wchar_t* pUniString, char *szUtf8 )
{
int nLen = WideCharToMultiByte(CP_UTF8, 0, pUniString, -1, NULL, 0, NULL, NULL);
char *szUtf8Temp = new char[nLen + 1];
memset( szUtf8Temp, 0, nLen + 1 );
WideCharToMultiByte ( CP_UTF8, 0, pUniString, -1, szUtf8Temp, nLen, NULL, NULL );
sprintf( szUtf8, "%s", szUtf8Temp );
delete[] szUtf8Temp;
return nLen;
}
int UniToUTF8( wchar_t* pUniString, std::string& strUtf8 )
{
int nLen = WideCharToMultiByte(CP_UTF8, 0, pUniString, -1, NULL, 0, NULL, NULL);
char *szUtf8Temp = new char[nLen + 1];
memset( szUtf8Temp, 0, nLen + 1 );
WideCharToMultiByte ( CP_UTF8, 0, pUniString, -1, szUtf8Temp, nLen, NULL, NULL );
strUtf8 = szUtf8Temp;
delete[] szUtf8Temp;
return nLen;
}
/*
*UTF-8转换成Unicode
*@param UTF8: 待转换的的UTF-8
*@return:返回Unicode格式的字符串
*/
CString UTF8ToUni( char* UTF8 )
{
DWORD dwUnicodeLen; //转换后Unicode的长度
wchar_t *pwText; //保存Unicode的指针
CString strUnicode; //返回值
//获得转换后的长度,并分配内存
dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);
pwText = new wchar_t[dwUnicodeLen];
if (!pwText)
{
return strUnicode;
}
//转为Unicode
MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);
//转为CString
strUnicode.Format(_T("%s"),pwText);
//清除内存
delete []pwText;
//返回转换好的Unicode字串
return strUnicode;
}
CString UTF8ToUni( std::string& strUTF8 )
{
DWORD dwUnicodeLen; //转换后Unicode的长度
wchar_t *pwText; //保存Unicode的指针
CString strUnicode; //返回值
//获得转换后的长度,并分配内存
dwUnicodeLen = MultiByteToWideChar( CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0 );
pwText = new wchar_t[ dwUnicodeLen ];
if ( !pwText ){
return strUnicode;
}
//转为Unicode
MultiByteToWideChar( CP_UTF8, 0, strUTF8.c_str(), -1, pwText, dwUnicodeLen );
strUnicode = pwText;
//清除内存
delete [] pwText;
return strUnicode;
}/*
*Unicode转换成UTF-8
*@param strUnicode: 待转换的C