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;

  • 相关阅读:
    webpack管理资源
    webpack缓存
    webpack起步
    openssl命令使用
    linux系统安装中文字体-----
    HTML转成PDF的4个前端方法----但都被我拒绝了,我选择后端方法(这才是吊!)
    HTML页面如何导出pdf
    为什么装了easyless插件,vscode还是不能用?
    JSON格式错误,json_decode中true和JSON_UNESCAPED_SLASHES的用法
    tp5条件判断,in,notin,between,if等
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940647.html
Copyright © 2011-2022 走看看