Big5和Gb编码转换

来源:互联网 发布:轻松学电脑网络多媒体 编辑:程序博客网 时间:2024/04/23 19:02

用 API 作简繁体转换
程序员之家 作者:不祥 日期:2004-4-1 9:55:00

--------------------------------------------------------------------------------
 
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;
    }