UTF-8字符串转为AnsiString (转)[@more@]
//江雪 2001.06.11 http://asnowcn.at.china.com
//将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 iword(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;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10748419/viewspace-976312/
,如需转载,请注明出处,否则将追究法律责任。