(转)简体繁体转换代码(Big5-GB | GBK简体-GBK繁体)

Function   Big52GB(BIG5Str:   String):   AnsiString; 
{进行big5转GB内码
Var 
    Len:   Integer; 
    pBIG5Char:   PChar; 
    pGBCHSChar:   PChar; 
    pGBCHTChar:   PChar; 
    pUniCodeChar:   PWideChar; 
Begin 
    //String   ->   PChar 
    pBIG5Char   :=   PChar(BIG5Str); 
    Len   :=   MultiByteToWideChar(950,   0,   pBIG5Char,   -1,   Nil,   0); 
    GetMem(pUniCodeChar,   Len   *   2); 
    ZeroMemory(pUniCodeChar,   Len   *   2); 
    //Big5   ->   UniCode 
    MultiByteToWideChar(950,   0,   pBIG5Char,   -1,   pUniCodeChar,   Len); 
    Len   :=   WideCharToMultiByte(936,   0,   pUniCodeChar,   -1,   Nil,   0,   Nil,   Nil); 
    GetMem(pGBCHTChar,   Len   *   2); 
    GetMem(pGBCHSChar,   Len   *   2); 
    ZeroMemory(pGBCHTChar,   Len   *   2); 
    ZeroMemory(pGBCHSChar,   Len   *   2); 
    //UniCode-> GB   CHT 
    WideCharToMultiByte(936,   0,   pUniCodeChar,   -1,   pGBCHTChar,   Len,   Nil,   Nil); 
    //GB   CHT   ->   GB   CHS 
    LCMapString($804,   LCMAP_SIMPLIFIED_CHINESE,   pGBCHTChar,   -1,   pGBCHSChar,   Len); 
    Result   :=   String(pGBCHSChar); 
    FreeMem(pGBCHTChar); 
    FreeMem(pGBCHSChar); 
    FreeMem(pUniCodeChar); 
End; 

Function   GB2Big5(GBStr:   String):   AnsiString; 
{进行GB转BIG5内码
Var 
    Len:   Integer; 
    pGBCHTChar:   PChar; 
    pGBCHSChar:   PChar; 
    pUniCodeChar:   PWideChar; 
    pBIG5Char:   PChar; 
Begin 
    pGBCHSChar   :=   PChar(GBStr); 
    Len   :=   MultiByteToWideChar(936,   0,   pGBCHSChar,   -1,   Nil,   0); 
    GetMem(pGBCHTChar,   Len   *   2   +   1); 
    ZeroMemory(pGBCHTChar,   Len   *   2   +   1); 
    //GB   CHS   ->   GB   CHT 
    LCMapString($804,   LCMAP_TRADITIONAL_CHINESE,   pGBCHSChar,   -1,   pGBCHTChar,   Len   *   2); 
    GetMem(pUniCodeChar,   Len   *   2); 
    ZeroMemory(pUniCodeChar,   Len   *   2); 
    //GB   CHT   ->   UniCode 
    MultiByteToWideChar(936,   0,   pGBCHTChar,   -1,   pUniCodeChar,   Len   *   2); 
    Len   :=   WideCharToMultiByte(950,   0,   pUniCodeChar,   -1,   Nil,   0,   Nil,   Nil); 
    GetMem(pBIG5Char,   Len); 
    ZeroMemory(pBIG5Char,   Len); 
    //UniCode   ->   Big5 
    WideCharToMultiByte(950,   0,   pUniCodeChar,   -1,   pBIG5Char,   Len,   Nil,   Nil); 
    Result   :=   String(pBIG5Char); 
    FreeMem(pBIG5Char); 
    FreeMem(pGBCHTChar); 
    FreeMem(pUniCodeChar); 
End; 

Function   GBCht2Chs(GBStr:   String):   AnsiString; 
{进行GBK繁体转简体
Var 
    Len:   Integer; 
    pGBCHTChar:   PChar; 
    pGBCHSChar:   PChar; 
Begin 
    pGBCHTChar   :=   PChar(GBStr); 
    Len   :=   MultiByteToWideChar(936,   0,   pGBCHTChar,   -1,   Nil,   0); 
    GetMem(pGBCHSChar,   Len   *   2   +   1); 
    ZeroMemory(pGBCHSChar,   Len   *   2   +   1); 
    //GB   CHS   ->   GB   CHT 
    LCMapString($804,   LCMAP_SIMPLIFIED_CHINESE,   pGBCHTChar,   -1,   pGBCHSChar,   Len   *   2); 
    Result   :=   String(pGBCHSChar); 
    FreeMem(pGBCHSChar); 
End; 

Function   GBChs2Cht(GBStr:   String):   AnsiString; 
{进行GBK简体转繁体
Var 
    Len:   Integer; 
    pGBCHTChar:   PChar; 
    pGBCHSChar:   PChar; 
Begin 
    pGBCHSChar   :=   PChar(GBStr); 
    Len   :=   MultiByteToWideChar(936,   0,   pGBCHSChar,   -1,   Nil,   0); 
    GetMem(pGBCHTChar,   Len   *   2   +   1); 
    ZeroMemory(pGBCHTChar,   Len   *   2   +   1); 
    //GB   CHS   ->   GB   CHT 
    LCMapString($804,   LCMAP_TRADITIONAL_CHINESE,   pGBCHSChar,   -1,   pGBCHTChar,   Len   *   2); 
    Result   :=   String(pGBCHTChar); 
    FreeMem(pGBCHTChar); 
End; 

转自:http://topic.csdn.net/u/20070426/22/1e1662a1-9768-4d80-a0c6-50512f4afbdb.html

你可能感兴趣的:(基础知识类)