Skip to content

Instantly share code, notes, and snippets.

@Temptationx
Created December 6, 2017 00:13
Show Gist options
  • Save Temptationx/5a43e64dae88179d98b9f777d16b0b4f to your computer and use it in GitHub Desktop.
Save Temptationx/5a43e64dae88179d98b9f777d16b0b4f to your computer and use it in GitHub Desktop.
UTF-8与GBK(或GB2312)编码转换
string GBKToUTF8(const char* strGBK)
{
int len = MultiByteToWideChar(CP_ACP, 0, strGBK, -1, NULL, 0);
wchar_t* wstr = new wchar_t[len+1];
memset(wstr, 0, len+1);
MultiByteToWideChar(CP_ACP, 0, strGBK, -1, wstr, len);
len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len+1];
memset(str, 0, len+1);
WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
string strTemp = str;
if(wstr) delete[] wstr;
if(str) delete[] str;
return strTemp;
}
string UTF8ToGBK(const char* strUTF8)
{
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8, -1, NULL, 0);
wchar_t* wszGBK = new wchar_t[len+1];
memset(wszGBK, 0, len*2+2);
MultiByteToWideChar(CP_UTF8, 0, strUTF8, -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);
string strTemp(szGBK);
if(wszGBK) delete[] wszGBK;
if(szGBK) delete[] szGBK;
return strTemp;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment