欢迎光临
我们一直在努力

utf-8字符串转为ansistring_delphi教程

建站超值云服务器,限时71元/月

   //将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;

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » utf-8字符串转为ansistring_delphi教程
分享到: 更多 (0)

相关推荐

  • 暂无文章