用 API 作简繁体转换

    技术2022-05-11  154

    時間: 2004/3/25作者: Robert參考: MSDN電郵: zsc771120@yahoo.com.cn關鍵字: 简繁体 API 内码 BIG5 GB2312 MultiByteToWideChar WideCharToMultiByte目的: 幫助受 內碼轉換 困擾的朋友

    1. 输入Big5字符,返回Gb简体字符

        //---------------------------------------------------------------------------     //函数输入Big5字符,返回Gb简体字符     //---------------------------------------------------------------------------     AnsiString __fastcall Big2Gb(AnsiString sBig)     {      char* pszBig5=NULL; //Big5编码的字符      wchar_t* wszUnicode=NULL; //Unicode编码的字符      char* pszGbt=NULL; //Gb编码的繁体字符      char* pszGbs=NULL; //Gb编码的简体字符      AnsiString sGb; //返回的字符串      int iLen=0; //需要转换的字符数           pszBig5=sBig.c_str(); //读入需要转换的字符参数           //计算转换的字符数      iLen=MultiByteToWideChar (950, 0, pszBig5, -1, NULL,0) ;      //给wszUnicode分配内存      wszUnicode=new wchar_t[iLen+1];      //转换Big5码到Unicode码,使用了API函数MultiByteToWideChar      MultiByteToWideChar (950, 0, pszBig5, -1, wszUnicode,iLen);           //计算转换的字符数      iLen=WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;      //给pszGbt分配内存      pszGbt=new char[iLen+1];      //给pszGbs分配内存      pszGbs=new char[iLen+1];      //转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte      WideCharToMultiByte (936, 0, (PWSTR) wszUnicode, -1, pszGbt,iLen, NULL, NULL) ;           //转换Gb码繁体到Gb码简体,使用API函数LCMapString      LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);           //返回Gb码简体字符      sGb=pszGbs;           //释放内存      delete [] wszUnicode;      delete [] pszGbt;      delete [] pszGbs;           return sGb;     }

    2. 输入Gb字符,返回Big5字符

        //---------------------------------------------------------------------------     //函数输入Gb字符,返回Big5字符     //---------------------------------------------------------------------------     AnsiString __fastcall Gb2Big(AnsiString sGb)     {      char* pszGbt=NULL; //Gb编码的繁体字符      char* pszGbs=NULL; //Gb编码的简体字符      wchar_t* wszUnicode=NULL; //Unicode编码的字符      char* pszBig5=NULL; //Big5编码的字符      AnsiString sBig5; //返回的字符串      int iLen=0; //需要转换的字符数           pszGbs=sGb.c_str(); //读入需要转换的字符参数           //计算转换的字符数      iLen=MultiByteToWideChar (936, 0, pszGbs, -1, NULL,0) ;           //给pszGbt分配内存      pszGbt=new char[iLen*2+1];      //转换Gb码简体到Gb码繁体,使用API函数LCMapString      LCMapString(0x0804,LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2);           //给wszUnicode分配内存      wszUnicode=new wchar_t[iLen+1];      //转换Gb码到Unicode码,使用了API函数MultiByteToWideChar      MultiByteToWideChar (936, 0, pszGbt, -1, wszUnicode,iLen);           //计算转换的字符数      iLen=WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, NULL,0, NULL, NULL) ;      //给pszBig5分配内存      pszBig5=new char[iLen+1];      //转换Unicode码到Big5码,使用API函数WideCharToMultiByte      WideCharToMultiByte (950, 0, (PWSTR) wszUnicode, -1, pszBig5,iLen, NULL, NULL) ;           //返回Big5码字符      sBig5=pszBig5;           //释放内存      delete [] wszUnicode;      delete [] pszGbt;      delete [] pszBig5;           return sBig5;     }

    最新回复(0)