急需 将Unicode码转化为汉字的函数(50分)

  • 主题发起人 主题发起人 miqi2000
  • 开始时间 开始时间
M

miqi2000

Unregistered / Unconfirmed
GUEST, unregistred user!
急需 将Unicode码转化为汉字的函数。用在查看手机短信。
 
//将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);
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);
buffer[length(buffer)]:=widechar((word(ch and $1f) shl 6) or (c1 and $3f));
end
else
begin
// 3-byte
inc(i);
c1 := byte(utf8str);
inc(i);
c2 := byte(utf8str);
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;

 
to kouchun:
能否针对函数给出一些文字说明,特别是codepage代表什么意思。
我作了个测试可得到的结果不是希望的值。
测试如下:
先算出“你好”的Unicode码为:4F60597D
可将 4F60597D 如何带入你给的函数再次得到 “你好”。
请赐教,谢谢!
 
下面符合你得要求吧
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
p: WideChar;
begin
s := '27880';
p := WideChar(StrToInt(s));
ShowMessage(p);
end;
 
to 流浪者_2008
'27880' 是什么类型的 码
 
后退
顶部