1:UNICODE和GBK互转
wstring MBytesToWString(const char *lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, lpcszString, - 1, NULL, 0);
wchar_t *pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1) *sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP, 0, lpcszString, - 1, (LPWSTR)pUnicode, unicodeLen);
wstring wString = (wchar_t *)pUnicode;
delete [] pUnicode;
return wString;
}
string WStringToMBytes(const wchar_t *lpwcszWString)
{
char *pElementText;
int iTextLen;
// wide char to multi char
iTextLen = ::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, - 1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void *)pElementText, 0, (iTextLen + 1) *sizeof(char));
::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, 0, pElementText, iTextLen, NULL, NULL);
string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}
2:GBK和UTF-8互转
string GBKToUTF8(const string &strGBK)
{
string strOutUTF8 = "";
WCHAR *str1;
int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), - 1, NULL, 0);
str1 = new WCHAR[n];
MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), - 1, str1, n);
n = WideCharToMultiByte(CP_UTF8, 0, str1, - 1, NULL, 0, NULL, NULL);
char *str2 = new char[n];
WideCharToMultiByte(CP_UTF8, 0, str1, - 1, str2, n, NULL, NULL);
strOutUTF8 = str2;
delete [] str1;
str1 = NULL;
delete [] str2;
str2 = NULL;
return strOutUTF8;
}
string UTF8ToGBK(const string &strUTF8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), - 1, NULL, 0);
WCHAR *wszGBK = new WCHAR[len + 1];
memset(wszGBK, 0, (len+1)*sizeof(WCHAR));
MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUTF8.c_str(), - 1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, - 1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, - 1, szGBK, len, NULL, NULL);
//strUTF8 = szGBK;
string strTemp(szGBK);
delete [] szGBK;
szGBK = NULL;
delete [] wszGBK;
wszGBK = NULL;
return strTemp;
}
3:UNICODE和UTF-8互转
wstring UTF8ToWString(const char *lpcszString)
{
int len = strlen(lpcszString);
int unicodeLen = ::MultiByteToWideChar(CP_UTF8, 0, lpcszString, - 1, NULL, 0);
wchar_t *pUnicode;
pUnicode = new wchar_t[unicodeLen + 1];
memset((void *)pUnicode, 0, (unicodeLen + 1) *sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8, 0, lpcszString, - 1, (LPWSTR)pUnicode, unicodeLen);
wstring wstrReturn(pUnicode);
delete [] pUnicode;
return wstrReturn;
}
string WStringToUTF8(const wchar_t *lpwcszWString)
{
char *pElementText;
int iTextLen = ::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, - 1, NULL, 0, NULL, NULL);
pElementText = new char[iTextLen + 1];
memset((void *)pElementText, 0, (iTextLen + 1) *sizeof(char));
::WideCharToMultiByte(CP_UTF8, 0, (LPWSTR)lpwcszWString, - 1, pElementText, iTextLen, NULL, NULL);
string strReturn(pElementText);
delete [] pElementText;
return strReturn;
}