2,586
社区成员
发帖
与我相关
我的任务
分享
//GB2312 转换成 Unicode:
wchar_t* GB2312ToUnicode(char* szBuf)
{
int nLen=MultiByteToWideChar(936,0,szBuf,-1,NULL,0);
wchar_t* pBuffer = new wchar_t[nLen+1];
MultiByteToWideChar(936,0,szBuf,-1,pBuffer,nLen);
pBuffer[nLen]=0;
return pBuffer;
}
char* UnicodeToBIG5(wchar_t* szBuf)
{
int nLen=WideCharToMultiByte(950,0,szBuf,-1,NULL,0,NULL,NULL);
char* pBuffer=new char[nLen+1];
WideCharToMultiByte(950,0,szBuf,-1,pBuffer,nLen,NULL,NULL);
pBuffer[nLen]=0;
return pBuffer;
}
==或者===================================================================
//简体中文 GB2312 转换成 繁体中文BIG5
char* GB2312TBIG5(char* szBuf)
{
LCID lcid=MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);
int nLength=LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szBuf,-1,NULL,0);
char* pBuffer=new char[nLength+1];
LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szBuf,-1,pBuffer,nLength);
pBuffer[nLength]=0;
wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);
char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);
delete[] pBuffer;
delete[] pUnicodeBuff;
return pBIG5Buff;
}
BYTE bVal[]=
{
0x6C,0x78,0xD8,0x76,0x6C,0x00,0x6F,0x00,0x67,0x00,
0x6F,0x00,0x2E,0x00,0x6A,0x00,0x70,0x00,0x67,0x00,
0x00,0x00
};
WCHAR wchBuff[64]={ 0 };
memcpy(wchBuff, bVal, sizeof(bVal));
MessageBoxW(NULL, wchBuff, L"Source", MB_OK);
WCHAR wszBig5[64+1] = {0};
WORD wLanguageID = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED);
LCID Locale = MAKELCID(wLanguageID, SORT_CHINESE_PRCP);
if(LCMapStringW(Locale, LCMAP_TRADITIONAL_CHINESE,
wchBuff, -1, wszBig5, 64*sizeof(TCHAR)) == 0)
{
DWORD dwErr = GetLastError();
ASSERT(0);
}
MessageBoxW(NULL, wszBig5, L"BIG5", MB_OK);