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;

  • 相关阅读:
    c语言面试基础题
    fwrite(&stud[i],sizeof(struct student_type),1,fp)的基本含义
    对于文件操作函数的记录
    将字符串s1复制到字符串s2。
    将键盘输入的几个数据存储到文件里的程序
    利用指针对二维数组进行遍历查找程序
    常见的C语言错误及程序的调试
    文件的基本操作函数及说明
    一个磁盘信息向另一个磁盘信息的复制
    常用流程图符号和基本流程图
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940647.html
Copyright © 2011-2022 走看看