utf-8显示问题(200分)

  • 主题发起人 主题发起人 PPMouse
  • 开始时间 开始时间
P

PPMouse

Unregistered / Unconfirmed
GUEST, unregistred user!
收取MSN发来的英文在MEMO中显示正常,但是中文则为乱码,想是编码的问题。
编码类型为:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=Tahoma; EF=; CO=80; CS=86; PF=22
求转为MEMO中能正确显示和MEMO中的中文转为这种编码的两个函数。
请各位大侠动手吧。

 
system单元已包含以下转化:
AnsiToUtf8 function
PUCS4Chars function
StringToWideChar function
UCS4StringToWideString function
UnicodeToUtf8 function
UTF8Decode function
UTF8Encode function
Utf8ToAnsi function
Utf8ToUnicode function
WideCharLenToString function
WideCharLenToStrVar procedure
WideCharToString function
WideCharToStrVar procedure
WideStringToUCS4String function
 
你用什麼的windows
 
我想,思路是不是这样:utf-8 -> GB2312 -> text ?
我在网上找了个函数,可以把UTF-8转为GB2312,但在MEMO里显示的还是乱吗,晕呀~
用的是Windows XP
 
帮顶一下
 
//将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;
看这个中不中???
 
后退
顶部