CString Convert(CString str,int sourceCodepage, int targetCodepage)
{int len = str.GetLength();
int unicodeLen = MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);
wchar_t *pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);
BYTE *pTargetData = NULL ;
int targetLen = WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char*)pTargetData,0,NULL,NULL);
pTargetData = new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char*)pTargetData,targetLen,NULL,NULL);
CString rt;
rt.Format("%s",pTargetData);
delete []pUnicode;
delete []pTargetData;
return rt ;
}
标准库的方法
string Convert(string str, int sourceCodepage, int targetCodepage)
{
size_t len=str.length();
size_t unicodeLen=MultiByteToWideChar(sourceCodepage,0,str.c_str(),-1,NULL,0);
wchar_t* pUnicode = NULL;
pUnicode=new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
MultiByteToWideChar(sourceCodepage,0,str.c_str(),-1,(LPWSTR)pUnicode,(int)unicodeLen);
BYTE* pTargetData = NULL;
int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,
(char *)pTargetData,0,NULL,NULL);
pTargetData=new BYTE[targetLen+1];
memset(pTargetData,0,targetLen+1);
WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,
(char*)pTargetData,targetLen,NULL,NULL);
string rt((char*)pTargetData);
delete [] pUnicode;
delete [] pTargetData;
return rt;
}
使用示例
utf-8转gb2312:
string gb2312 = Convert(utf8,CP_UTF8,936);
gb2312转utf8
string utf8 = Convert(gb2312,936,CP_UTF8)
其中通过GET访问WEBQQ返回的中文出现乱码,只要把UTF-8转GB2312后 就能正确显示中文了。
//utf-8转gb2312:
CString httpsource;
httpsource = Convert(httpsource,CP_UTF8,936);