直接贴源码:
具体源码函数文件见此链接: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; }