zoukankan      html  css  js  c++  java
  • 编码转换 unicode gbk big5

    function UnicodeEncode(Str:string;CodePage:integer):WideString;
    var
      Len:integer;
    begin
      Len:=Length(Str)+1;
      SetLength(Result,Len);
      Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len);
      SetLength(Result,Len-1); //end is #0
    end;

    function UnicodeDecode(Str:WideString;CodePage:integer):string;
    var
      Len:integer;
    begin
      Len:=Length(Str)*2+1;  //one for #0
      SetLength(Result,Len);
      Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil);
      SetLength(Result,Len-1);
    end;

    function Gb2Big5(Str:string):string;
    begin
      SetLength(Result,Length(Str));
      LCMapString(GetUserDefaultLCID,LCMAP_TRADITIONAL_CHINESE,
        PChar(Str),Length(Str),
        PChar(Result),Length(Result));
      Result:=UnicodeDecode(UnicodeEncode(Result,936),950);
    end;

    function Big52Gb(Str:string):string;
    begin
      Str:=UnicodeDecode(UnicodeEncode(Str,950),936);
      SetLength(Result,Length(Str));
      LCMapString(GetUserDefaultLCID,LCMAP_SIMPLIFIED_CHINESE,
        PChar(Str),Length(Str),
        PChar(Result),Length(Result));
    end;

    关键使用了UnicodeToUtf8这个函数
    function Utf8Encode(const WS: WideString): UTF8String;
    var
      L: Integer;
      Temp: UTF8String;
    begin
      Result := '';
      if WS = '' then Exit;
      SetLength(Temp, Length(WS) * 3); // SetLength includes space for null terminator
      L := UnicodeToUtf8(PChar(Temp), Length(Temp)+1, PWideChar(WS), Length(WS));
      if L > 0 then
        SetLength(Temp, L-1)
      else
        Temp := '';
      Result := Temp;
    end;


    function Encode2Utf8(const WS: UTF8String): WideString;
    var
      L: Integer;
      Temp: WideString;
    begin
      Result := '';
      if WS = '' then Exit;
      SetLength(Temp, Length(WS) * 3); // SetLength includes space for null terminator
      L := Utf8ToUnicode(PWideChar(Temp), PChar(WS), Length(WS));
      if L > 0 then
        SetLength(Temp, L-1)
      else
        Temp := '';
      Result := Temp;
    end;

  • 相关阅读:
    python中的字典
    python中的元组操作
    python中的列表
    python中的内建函数
    python中格式化字符串
    34 哈夫曼编码
    33 构造哈夫曼树
    32 哈夫曼树
    31 树和森林的遍历
    30 森林和二叉树的转化(二叉树与多棵树之间的关系)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940647.html
Copyright © 2011-2022 走看看