首页 > 学院 > 开发设计 > 正文

UTF-8字符串转为AnsiString

2019-11-18 18:53:36
字体:
来源:转载
供稿:网友
   //将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;

上一篇:界面色彩渐变效果的实现

下一篇:动态更新DBGrid的颜色

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
学习交流
热门图片

新闻热点

疑难解答

图片精选

网友关注