// utf-8转unicode
CString CHotpimUploadDlg::UnicodeToUTF_8First(CString str)
{
int u8Len =WideCharToMultiByte(CP_UTF8, NULL,CStringW(str),str.GetLength(), NULL, 0, NULL, NULL);
char* szU8 = new char[u8Len + 1];
WideCharToMultiByte(CP_UTF8, NULL, CStringW(str), str.GetLength(), szU8, u8Len, NULL, NULL);
szU8[u8Len] = '\0';
CString strReturn = szU8;
delete szU8;
return strReturn;
}
//utf-8转unicode
CString CHotpimUploadDlg::Utf_8ToUnicode(char* szU8)
{
// UTF8 to Unicode
// 由于中文直接复制过来会成乱码,编译器有时会报错,故采用16进制形式
// 预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
CString strUnicode = wszString;
delete wszString;
return strUnicode;
}
CString和wstring互转
CString转std::wstring
std::wstring str = filename.GetString();
std::wstring转CString
CString str( filename.c_str() );