|
< >最近拿到一个台湾的引擎,测试以后发现只能显示繁体中文,为此专门搜集一些资料放在这里,以便查阅</P>
< >//--------------------------------------------------------------------------- <br>//函数输入Big5字符,返回Gb简体字符 <br>//--------------------------------------------------------------------------- <br>AnsiString __fastcall Big2Gb(AnsiString sBig) <br>{ <br>char* pszBig5=NULL; //Big5编码的字符 <br>wchar_t* wszUnicode=NULL; //Unicode编码的字符 <br>char* pszGbt=NULL; //Gb编码的繁体字符 <br>char* pszGbs=NULL; //Gb编码的简体字符 <br>AnsiString sGb; //返回的字符串 <br>int iLen=0; //需要转换的字符数 <br><br>pszBig5=sBig.c_str(); //读入需要转换的字符参数 <br><br>//计算转换的字符数 <br>iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ; <br>//给wszUnicode分配内存 <br>wszUnicode=new wchar_t[iLen+1]; <br>//转换Big5码到Unicode码,使用了API函数MultiByteToWideChar <br>MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen); <br><br>//计算转换的字符数 <br>iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ; <br>//给pszGbt分配内存 <br>pszGbt=new char[iLen+1]; <br>//给pszGbs分配内存 <br>pszGbs=new char[iLen+1]; <br>//转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte <br>WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ; <br><br>//转换Gb码繁体到Gb码简体,使用API函数LCMapString <br>LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen); <br><br>//返回Gb码简体字符 <br>sGb=pszGbs; <br><br>//释放内存 <br>delete [] wszUnicode; <br>delete [] pszGbt; <br>delete [] pszGbs; <br><br>return sGb; <br>} <br>2. 输入Gb字符,返回Big5字符 <br>//--------------------------------------------------------------------------- <br>//函数输入Gb字符,返回Big5字符 <br>//--------------------------------------------------------------------------- <br>AnsiString __fastcall Gb2Big(AnsiString sGb) <br>{ <br>char* pszGbt=NULL; //Gb编码的繁体字符 <br><br>char* pszGbs=NULL; //Gb编码的简体字符 <br>wchar_t* wszUnicode=NULL; //Unicode编码的字符 <br>char* pszBig5=NULL; //Big5编码的字符 <br>AnsiString sBig5; //返回的字符串 <br>int iLen=0; //需要转换的字符数 <br><br>pszGbs=sGb.c_str(); //读入需要转换的字符参数 <br><br>//计算转换的字符数 <br>iLen=MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ; <br><br>//给pszGbt分配内存 <br>pszGbt=new char[iLen*2+1]; <br>//转换Gb码简体到Gb码繁体,使用API函数LCMapString <br>LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2); <br><br>//给wszUnicode分配内存 <br>wszUnicode=new wchar_t[iLen+1]; <br>//转换Gb码到Unicode码,使用了API函数MultiByteToWideChar <br>MultiByteToWideChar (936, 0, pszGbt, -1, wszUnicode,iLen); <br><br>//计算转换的字符数 <br>iLen=WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ; <br>//给pszBig5分配内存 <br>pszBig5=new char[iLen+1]; <br>//转换Unicode码到Big5码,使用API函数WideCharToMultiByte <br>WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, pszBig5,iLen, NULL, NULL) ; <br><br>//返回Big5码字符 <br>sBig5=pszBig5; <br><br>//释放内存 <br>delete [] wszUnicode; <br>delete [] pszGbt; <br>delete [] pszBig5; <br><br>return sBig5; <br>} </P> |
|