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;

  • 相关阅读:
    webstorm配置less解析的方法
    C#面试题(String和StringBuilder区别)
    Winform控件输入的字母转换成大写
    C#之实参和形参
    我学React Native开发的经历(一) 第一周学习,环境搭建及demo1,一个导航跳转页面
    三、CSS样式——背景
    二、CSS选择器
    一、CSS介绍
    九、非主体机构元素——header元素、footer元素、address元素、网页编排
    八(第三篇)、主体结构元素——time元素、pubdate属性
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940647.html
Copyright © 2011-2022 走看看