• 内码转换单元


    unit senfore;

    interface

    uses
      windows;

      
    function Big52GB(BIG5Str : String): AnsiString;
      
    function GB2Big5(GBStr : String): AnsiString;
      
    function GBCht2Chs(GBStr : String): AnsiString;
      
    function GBChs2Cht(GBStr : String): AnsiString;

    implementation

    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(pGBCHTChar);
      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);
      
    //FreeMem(pGBCHSChar);
    end;

    end.
  • 相关阅读:
    Jquery清除style样式
    合并单元格式
    SQL根据下标,返回split分割后字符串
    js功能比较全面的yyyyMMdd格式的日期验证正则
    DataTable to Json
    List<T>下的Find,FindAll等条件过滤函数的使用方法
    获取iframe内部DOM对象
    PowerDesigner取消Name与Code同步
    再次回归
    最近遇到一个比较有意思的题目
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1519607.html
Copyright © 2020-2023  润新知