转载请注明出处:http://blog.csdn.net/yf210yf/article/details/7854021
- #include <iostream>
- #include <atlstr.h>
- #include <locale.h>
- using namespace std;
- char * BIG52GBK(char *szBuf) ;
- char * GBK2BIG5(char *szBuf) ;
- char * GB2GBK(char *szBuf) ;
- char * GBK2GB(char *szBuf) ;
- void main()
- {
- CString cStr1;
- char str_big5[100] = "い地チ㎝瓣";
- char * rlt_big5=BIG52GBK(str_big5);
- cStr1.Format( "%s",rlt_big5);
- cout<<rlt_big5<<endl;
- char str_gbk[100] = "中華人民共和國";
- char * rlt_gbk=GBK2BIG5(str_gbk);
- cStr1.Format( "%s",rlt_gbk);
- cout<<rlt_gbk<<endl;
- char str_gb2[100] = "中华人民共和国";
- char * rlt_gb2=GB2GBK(str_gb2);
- cStr1.Format( "%s",rlt_gb2);
- cout<<rlt_gb2<<endl;
- char str_gbk2[100] = "中華人民共和國";
- char * rlt_gbk2=GBK2GB(str_gbk2);
- cStr1.Format( "%s",rlt_gbk2);
- cout<<rlt_gbk2<<endl;
- }
- //---------------------------------------------------------------------------
- // 大五码转GBK码:
- // い地チ㎝瓣 --> 中華人民共和國
- char * BIG52GBK(char *szBuf)
- {
- if(!strcmp(szBuf, " "))
- return 0;
- int nStrLen = strlen(szBuf);
- wchar_t *pws = new wchar_t[nStrLen + 1];
- int nReturn = MultiByteToWideChar(950, 0, szBuf, nStrLen, pws, nStrLen + 1);
- BOOL bValue = false;
- nReturn = WideCharToMultiByte(936, 0, pws, nReturn, szBuf, nStrLen + 1, "? ", &bValue);
- szBuf[nReturn] = 0;
- return szBuf;
- }
- //---------------------------------------------------------------------------
- // GBK转大五码
- // 中華人民共和國 --> い地チ㎝瓣
- char * GBK2BIG5(char *szBuf)
- {
- if(!strcmp(szBuf, " "))
- return 0;
- int nStrLen = strlen(szBuf);
- wchar_t *pws = new wchar_t[nStrLen + 1];
- MultiByteToWideChar(936, 0, szBuf, nStrLen, pws, nStrLen + 1);
- BOOL bValue = false;
- WideCharToMultiByte(950, 0, pws, nStrLen, szBuf, nStrLen + 1, "? ", &bValue);
- szBuf[nStrLen] = 0;
- return szBuf;
- }
- //----------------------------------------------------------------------------
- // GB2312码转GBK码
- // 中华人民共和国 --> 中華人民共和國
- char * GB2GBK(char *szBuf)
- {
- if(!strcmp(szBuf, " "))
- return 0;
- int nStrLen = strlen(szBuf);
- DWORD wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);
- int nReturn = LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE, szBuf, nStrLen, NULL, 0);
- if(!nReturn)
- return 0;
- char *pcBuf = new char[nReturn + 1];
- wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_PRC);
- LCMapString(wLCID, LCMAP_TRADITIONAL_CHINESE,szBuf, nReturn, pcBuf, nReturn + 1);
- strncpy(szBuf, pcBuf, nReturn);
- return szBuf;
- }
- //---------------------------------------------------------------------------
- // GBK码转GB2312码
- // 中華人民共和國 --> 中华人民共和国
- char * GBK2GB(char *szBuf)
- {
- if(!strcmp(szBuf, " "))
- return 0;
- int nStrLen = strlen(szBuf);
- WORD wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5);
- int nReturn = LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nStrLen, NULL, 0);
- if(!nReturn)
- return 0;
- char *pcBuf = new char[nReturn + 1];
- wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5);
- LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, szBuf, nReturn, pcBuf, nReturn + 1);
- strncpy(szBuf, pcBuf, nReturn);
- return szBuf;
- }