直接贴源码:
具体源码函数文件见此链接:http://download.csdn.net/detail/lingxiu0613/5290721
BOOL AnsiToUcs(const CStringA &strAnsi, CStringW &strUcs)
{
// Ansi 转换为 Ucs
int iRet = ::MultiByteToWideChar(CP_ACP, 0, strAnsi, -1, NULL, 0);
if (iRet == 0)
return FALSE;
WCHAR *szBuff = new WCHAR[iRet];
iRet = ::MultiByteToWideChar(CP_ACP, 0, strAnsi, -1, szBuff, iRet);
if (iRet == 0)
return FALSE;
strUcs = szBuff;
delete [] szBuff;
return TRUE;
}
BOOL UcsToAnsi(const CStringW &strUcs, CStringA &strAnsi)
{
// Ucs 转换为 Ansi
int iRet = ::WideCharToMultiByte(CP_ACP, 0, strUcs, -1, NULL, 0, NULL, NULL);
if (iRet == 0)
return FALSE;
CHAR *szBuff = new CHAR[iRet];
iRet = ::WideCharToMultiByte(CP_ACP, 0, strUcs, -1, szBuff, iRet, NULL, NULL);
if (iRet == 0)
return FALSE;
strAnsi = szBuff;
delete [] szBuff;
return TRUE;
}
BOOL UcsToUtf8(const CStringW &strUcs, CStringA &strUtf8)
{
// Ucs 转换为 Utf8
int iRet = ::WideCharToMultiByte(CP_UTF8, 0, strUcs, -1, NULL, 0, NULL, NULL);
if (iRet == 0)
return FALSE;
CHAR *szBuf = new CHAR[iRet];
iRet = ::WideCharToMultiByte(CP_UTF8, 0, strUcs, -1, szBuf, iRet, NULL, NULL);
if (iRet == 0)
return FALSE;
strUtf8 = szBuf;
delete [] szBuf;
return TRUE;
}
BOOL Utf8ToUcs(const CStringA &strUtf8, CStringW &strUcs)
{
// Utf8 转换为 Ucs
// Utf8 转换为 Unicode
int iRet = ::MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, NULL, 0);
if (iRet == 0)
return FALSE;
WCHAR *szBuf = new WCHAR[iRet];
iRet = ::MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, szBuf, iRet);
if (iRet == 0)
return FALSE;
strUcs = szBuf;
delete [] szBuf;
return TRUE;
}
BOOL AnsiToUtf8(const CStringA &strAnsi, CStringA &strUtf8)
{
// Ansi 转换为 Ucs
CStringW strUcs;
BOOL bRet = AnsiToUcs(strAnsi, strUcs);
if (bRet == FALSE)
return FALSE;
// Ucs 转换为 Utf8
return UcsToUtf8(strUcs, strUtf8);
}
BOOL Utf8ToAnsi(const CStringA &strUtf8, CStringA &strAnsi)
{
// Utf8 转换为 Ucs
CStringW strUcs;
BOOL bRet = Utf8ToUcs(strUtf8, strUcs);
if (bRet == FALSE)
return FALSE;
// Ucs 转换为 Ansi
bRet = UcsToAnsi(strUcs, strAnsi);
if (bRet == FALSE)
return FALSE;
return TRUE;
}