程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> UTF-8字符串轉為AnsiString

UTF-8字符串轉為AnsiString

編輯:Delphi
  //將UTF-8字符串轉為代碼頁為CodePage的AnsiString。
  function UTF8ToAnsiString(utf8str:string; CodePage:integer):AnsiString;
  var
   i:integer;
   buffer:widestring;
   ch,c1,c2:byte;
  
  begin
   result:='';
   i:=1;
   while i<=Length(utf8str) do begin
     ch:=byte(utf8str[i]);
     setlength(buffer,length(buffer)+1);
     if (ch and $80)=0 then //1-byte
        buffer[length(buffer)]:=widechar(ch)
     else begin
     if (ch AND $E0) = $C0 then begin // 2-byte
        inc(i);
        c1 := byte(utf8str[i]);
        buffer[length(buffer)]:=widechar((Word(ch AND $1F) SHL 6) OR (c1 AND $3F));
      end
      else begin // 3-byte
        inc(i);
        c1 := byte(utf8str[i]);
        inc(i);
        c2 := byte(utf8str[i]);
        buffer[length(buffer)]:=widechar(
          (Word(ch AND $0F) SHL 12) OR
          (Word(c1 AND $3F) SHL 6) OR
          (c2 AND $3F));
      end;
      end;
     inc(i);
    end; //while
    i := WideCharToMultiByte(codePage,
             WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
             @buffer[1], -1, nil, 0, nil, nil);
    if i>1 then begin
      SetLength(Result, i-1);
      WideCharToMultiByte(codePage,
          WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
          @buffer[1], -1, @Result[1], i-1, nil, nil);
    end;
  end;
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved