过往的项目中总是设计到一些UNICODE与ANSI之间的编码转换,这个在Java中不难,使用API就搞定了。但是在C/C++中就要麻烦一点,可以使用下面的代码实现转换。
声明:该代码分配的空间需要手动删除掉!并且只能在Windows的平台下使用。
UNICODE转换ANSI:
char* CODE_W2A(LPCWSTR lpW)
{
int len = ::WideCharToMultiByte(CP_ACP, 0, lpW, -1, NULL, 0, NULL, NULL);
if (len == 0)
{
AfxMessageBox(_T("编码转换失败!"));
ASSERT(FALSE);
}
std::vector<char> _ansi(len);
::WideCharToMultiByte(CP_ACP, 0, lpW, -1, &_ansi[0], len, NULL, NULL);
char* lpRet = new char[len];
ZeroMemory(lpRet,len);
lstrcpyA(lpRet,&_ansi[0]);
return lpRet;
}
ANSI 转换 UNICODE:
wchar_t* CODE_A2W(LPCSTR lpA)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, lpA, -1, NULL, 0);
if (len == 0)
{
AfxMessageBox(_T("编码转换失败!"));
ASSERT(FALSE);
}
std::vector<wchar_t> _uincode(len);
::MultiByteToWideChar(CP_ACP, 0, lpA, -1, &_uincode[0], len);
wchar_t* lpRet = new wchar_t[len];
ZeroMemory(lpRet,len);
lstrcpyW(lpRet,&_uincode[0]);
return lpRet;
}