关于utf8解码的问题

jxk 2002-10-08 04:20:01
我自己写了一个收邮件的程序,可是在收到以后,有如"=?utf-8?B?5p205pil6Zye?="的乱码,请问怎么才能把它转换成我可以看得懂的文字?最好给出代码!谢谢
...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifejoy 2002-11-15
  • 打赏
  • 举报
回复
mark
liuxiaowei 2002-10-09
  • 打赏
  • 举报
回复
直接用以下函数就行了:
UnicodeToUtf8 function:
Converts a string of Unicode characters into a UTF-8 string.
UTF8Decode function:
Converts a UTF8 string to a Unicode string (WideString).
UTF8Encode function:
Converts a WideString value to a UTF8 string.
Utf8ToAnsi function:
Converts a UTF8 string to a string of Ansi characters.
Utf8ToUnicode function:
Converts a string of UTF-8 characters to a Unicode string.
jxk 2002-10-08
  • 打赏
  • 举报
回复
怎么用阿?
Billy_Chen28 2002-10-08
  • 打赏
  • 举报
回复
给你一个函数:
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;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧