1、ansi-->GB2312
char* U2G(const char* utf8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
if(wstr) delete[] wstr;
return str;
}
2、ansi--->unicode
wstring AnsiToUnicode(const char* str, int strLen, int codePage)
{
wstring res;
int bufSize = strLen + 1;
WCHAR* buf = new WCHAR[bufSize];
if (buf == NULL)
return wstring(L"");
memset(buf, 0, bufSize * sizeof(WCHAR));
MultiByteToWideChar(codePage, 0, str, (int)strLen, buf, bufSize);
res = buf;
delete[] buf;
return res;
}
3、unicode-->ansi
string UnicodeToAnsi(const wchar_t* str, int strLen, int codePage)
{
string res;
// 转换为utf8时,一个汉字占三个字节,需要足够的空间
int bufSize = strLen * 3 + 1;
CHAR* buf = new CHAR[bufSize];
if (buf == NULL)
{
return string("");
}
memset(buf, 0, bufSize);
WideCharToMultiByte(codePage, 0, str, strLen, buf, bufSize, NULL, NULL);
res = buf;
delete[] buf;
return res;
}