一般的繁简转换对照表比较麻烦,因此定义了一个大头文件,直接包含即可,文件说明如下: //*****************************说明****************************** //==========================AllCode[][]数组======================== //繁简转换编码对照数组,每6个编码为一组 //依次为Big5Unicode, GBUnicode, Big5(BE), GB(BE), Big5(LE), GB(LE) //Big5Unicode: 繁体字的Unicode编码 //GBUnicode: 简体字的Unicode编码 //Big5(BE): 繁体字的Big5编码,Big-Endian序系统用 //GB(BE): 简体字的GB编码,Big-Endian序系统用 //Big5(LE): 繁体字的Big5编码,Little-Endian序系统用 //GB(LE): 简体字的GB编码,Little-Endian序系统用 //=============================================================== //=========================CodeIndex[][]数组======================= //快速序号查找对照数组,每6个为一组 //依次为Big5Unicode, GBUnicode, Big5(BE), GB(BE), Big5(LE), GB(LE) //可以根据已知的字符编码以及字符集查找其在AllCode[]数组中的序号 //举例: //已知“华”的GB编码为0xBBAA,要转为Big5码。 //由于GB码是大字节序,那么如果在Little-Endian的系统上,其在内存中的值应该是0xAABB, //于是我们可以在CodeIndex[][]数组中找到编码为0xAABB的那一行的GB(LE)所对应的数值为9311, //然后再找到AllCode[]中序号为9311的那行数据。 //然后就可以将“华”在内存中的数据0xAABB转换为9311那一行对应的Big5(LE)编码0xD8B5 //=============================================================== //由于简体字与繁体字为一对多的关系,所以此对照方法从简体转为繁体并不是十分准确, //最好的办法是使用词库转换,但词库转换比较复杂,需要大量的词库对照。 //**************************************************************** 下载地址http://download.csdn.net/source/2695796 示例函数(GB转Big5Unicode): static CString& Convert2Big5Unicode(PBYTE pGB, DWORD dwSize, CString& strRet) { LPTSTR lpStr = strRet.GetBuffer(1024); int iPos = 0; TCHAR ch; TCHAR chTar; for (UINT i = 0; i < dwSize; i++) { if (pGB[i] <0x80) { lpStr[iPos++] = pGB[i]; } else { CopyMemory(&ch, pGB + i, 2); lpStr[iPos++] = (chTar = AllCode[CodeIndex[ch][GB]][Big5Unicode])?chTar:ch; i++; } } lpStr[iPos] = 0; strRet.ReleaseBuffer(); return strRet; }