如何避免使用Indy 10.6和Delphi 7读取UTF-8电子邮件的错误字符

时间:2014-09-22 12:25:13

标签: delphi email utf-8 indy

我正在阅读Indy 10.6.1.5187和Delphi 7的电子邮件。

我只有UTF-8编码电子邮件的问题,这些邮件会转换为客户计算机中的错误字符。

我已经阅读了很多关于这个问题的内容,但除了自己解码原始电子邮件外,我还没有找到解决方案。

我想知道当发件人用UTF-8对它们进行编码时,是否有办法获取正确的电子邮件。

感谢。

1 个答案:

答案 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()函数的文档。