我正在阅读Indy 10.6.1.5187和Delphi 7的电子邮件。
我只有UTF-8编码电子邮件的问题,这些邮件会转换为客户计算机中的错误字符。
我已经阅读了很多关于这个问题的内容,但除了自己解码原始电子邮件外,我还没有找到解决方案。
我想知道当发件人用UTF-8对它们进行编码时,是否有办法获取正确的电子邮件。
感谢。
答案 0 :(得分:2)
收到的UTF8字符串就像是一个Ansi字符串。你必须解码它。
您必须在UTF8String
(在Delphi 7中称为AnsiString
又名String
)中接收消息文本,然后将它们从UTF8转换为AnsiString
或(最好) WideString
。您可以使用UFT8Decode()
或Utf8ToAnsi()
功能解码电子邮件正文。
如果使用UFT8Decode()
功能,您仍需要使用WideString识别控件来显示收到的信息。
如果您使用Utf8ToAnsi()
功能,结果可能不包含不属于用户本地代码页的字符。
所以你会使用类似的东西:
var
ustrEmailBody: UTF8String;
wstrDecoded: WideString;
begin
...
// ustrEmailBody now contains the email body
wstrDecoded := UTF8Decode(ustrEmailBody);
SomeUnicodeAwareMemo.Text := wstrDecoded;
或
var
ustrEmailBody: UTF8String;
astrDecoded: AnsiString;
begin
...
// ustrEmailBody now contains the email body
astrDecoded := Utf8ToAnsi(ustrEmailBody);
SomeMemo.Text := astrDecoded; // the memo might display '?' in place of unknown characters
有关详细信息,请参阅Delphi帮助中的UFT8Decode()
或Utf8ToAnsi()
函数的文档。