我目前正在创建一个小的邮件客户端,并且遇到字符集问题。
我使用Indy的TIdIMAP4组件从邮件服务器检索数据。当我尝试检索邮件正文时,将重音字母(如ä,ü等)分别转换为= E4,= FC,就像使用字符集ISO-8859-1一样。
内容类型:文本/纯文本;
charset =“ ISO-8859-1”
内容传输编码:
引用可打印
我如何使服务器通过另一个字符集(例如utf-8)向我发送数据?解决该问题的最佳解决方案是什么?
提前致谢!
最佳答案
产生charset
和=E4
之类的字符串的不是=FC
,而是Content-Transfer-Encoding
。 $E4
和$FC
是ISO-8859-1中ä
和ü
的二进制表示形式,但是它们是8位值。电子邮件在很大程度上仍是7位环境。除非客户端和服务器都在通信过程中协商8位传输,否则必须以7位兼容方式对$7F
以上的字节八位字节进行编码,以安全地通过电子邮件网关,尤其是仍然存在的电子邮件网关。 quoted-printable
是电子邮件中用于文本内容的常用7位字节编码。 base64
是另一个,但它不是人类可读的,因此它倾向于用于二进制数据而不是文本数据(尽管它可以用于文本)。
无论如何,您都无法使服务器以其他编码方式将电子邮件数据传递给您。服务器仅按原样发送原始电子邮件数据,该原始电子邮件数据是由发件人最初传递给它的。如果要使用UTF-8格式的数据,则必须在下载后自己重新编码。 Indy将为您处理解码。
关于delphi - 从邮件服务器检索邮件时更改字符集!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5584204/