如何使用Indy 10.6和Delphi 7避免错误字符阅读UTF-8电子邮件
我正在阅读Indy 10.6.1.5187和Delphi 7的电子邮件 我只对UTF-8编码的电子邮件有问题,这些邮件在客户的电脑中被翻译成错误的字符 我读了很多关于这个问题的书,但除了自己解码原始邮件外,我还没有找到解决办法 我想知道,当发送者用UTF-8编码电子邮件时,是否有办法获得正确的电子邮件如何使用Indy 10.6和Delphi 7避免错误字符阅读UTF-8电子邮件,delphi,email,utf-8,indy,Delphi,Email,Utf 8,Indy,我正在阅读Indy 10.6.1.5187和Delphi 7的电子邮件 我只对UTF-8编码的电子邮件有问题,这些邮件在客户的电脑中被翻译成错误的字符 我读了很多关于这个问题的书,但除了自己解码原始邮件外,我还没有找到解决办法 我想知道,当发送者用UTF-8编码电子邮件时,是否有办法获得正确的电子邮件 谢谢。收到的UTF8字符串与收到的Ansi字符串一样。您必须对其进行解码。 您必须以UTF8String(Delphi7中的aka.AnsiStringakaString)的形式接收消息文本,然
谢谢。收到的UTF8字符串与收到的Ansi字符串一样。您必须对其进行解码。
您必须以
UTF8String
(Delphi7中的aka.AnsiString
akaString
)的形式接收消息文本,然后将其从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;
或
有关更多信息,请参阅Delphi帮助中的
UFT8Decode()
或Utf8ToAnsi()
函数的文档。我们需要查看更多详细信息。为了提出解决方案,我认为我们首先需要诊断问题。在将数据解码为UTF-8之前,确保电子邮件的字符集实际显示UTF-8。世界上并非所有人都使用UTF-8。@RemyLebeau-我的回答直接解决了问题中所述的问题。约翰写道:“我只对UTF-8编码的电子邮件有问题,这些邮件在客户的电脑中被翻译成错误的字符。”
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