//---------------------------------------------------------------------------- // GB2312 => GBK void GB2GBK(char *szBuf) { if(!strcmp(szBuf, "")) return; int nStrLen = strlen(szBuf); WORD 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; char *pcBuf = new char[nReturn + 1]; __try { 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); } __finally { delete[] pcBuf; } }
//--------------------------------------------------------------------------- // GBK =〉GB2312
void GBK2GB(char *szBuf) { if(!strcmp(szBuf, "")) return; 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; char *pcBuf = new char[nReturn + 1]; __try { 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); } __finally { delete []pcBuf; } } |
|
// 调用示例
......
char sourceEncode[255]; char szBuf[1024];
// 从 GB2312 转到 GBK strcpy(szBuf, sourceEncode); GB2GBK(szBuf);
// 从GB2312 转到 BIG5,通过 GBK 中转 strcpy(szBuf, sourceEncode); GB2GBK(szBuf); GBK2BIG5(szBuf); ......
}
|
|