WEB开发网
开发学院软件开发Delphi UTF-8字符串转为AnsiString 阅读

UTF-8字符串转为AnsiString

 2006-02-04 13:28:07 来源:WEB开发网   
核心提示: //将UTF-8字符串转为代码页为CodePage的AnsiString。function UTF8ToAnsiString(utf8str:string; CodePage:integer):AnsiString;var i:integer; buffer:widestring; ch,c1,c2:byte;beg
  //将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;

Tags:UTF 字符串 转为

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接