发现问题
最近在用delphi做一个自娱的跨平台邮件发送程序时,发现在发送主题为中文时,接收方会显示为?????。这个问题出现在安卓平台,同样的代码,windows平台是没问题的。通过查看邮件的源码发现,安卓程序发送的源码就是???,很明显就是没有对中文进行正确的编码。本以为将idmessage的charset设为utf-8就能解决,结果却事与愿违。
于是进行调试分析,终于找到了原因。
解决问题
打开idmessage.pas源码,另存到项目根目录,定位到procedure TIdMessage.GenerateHeader;
这个过程。
找到这一行: InitializeISO(HeaderEncoding, ISOCharSet);
在这一行下面添加:
{$IFDEF ANDROID}
ISOCharSet:='UTF-8';
HeaderEncoding:='B';
{$ENDIF}
这是针对安卓平台的编译指令。原因就是InitializeISO这个过程初始化字符集数据时,采用的是windows平台的API,没有考虑安卓平台,导致编码识别出错,我们给它加上正确的编码指令,就完美解决了问题。