2011-04-07 43 views
1

我目前正在创建一个小邮件客户端,并面临charset的问题。 我使用indy的TIdIMAP4组件从邮件服务器检索数据。当我尝试检索邮件正文时,重音字母如ä,ü等将分别转换为= E4,= FC,因为它使用字符集ISO-8859-1。从邮件服务器检索邮件时更改字符集!

Content-Type:text/plain; 字符集= “ISO-8859-1” 内容传输编码: 引用可打印

我怎样才能让服务器系统向我发送数据在另一个字符集,如UTF-8?这个问题最好的解决方案是什么?

提前致谢!

回答

5

它不是产生像=E4=FC这样的字符串的charset,而是Content-Transfer-Encoding$E4$FC是ISO-8859-1中的äü的二进制表示,但它们是8位值。电子邮件仍然主要是7位环境。除非客户端和服务器在通信期间协商8位传输,否则高于$7F的字节八位字节必须以7位兼容方式进行编码,以安全地通过电子邮件网关,特别是仍存在的传统网关。 quoted-printable是电子邮件中用于文本内容的常用7位字节编码。 base64是另一个,但它不是人类可读的,所以它倾向于用于二进制数据而不是文本数据(虽然它可以用于文本)。

在任何情况下,您都无法让服务器以另一种编码方式向您发送电子邮件数据。服务器仅仅传递原始邮件数据,原始邮件由发件人传送给它。如果你想以UTF-8格式输出数据,那么你必须在下载之后自己重新编码。 Indy将为您处理解码。

+0

我使用Indy的TIdDecoderQuotedPrintable类来解码“quoted printable”编码的字符串。工作得很好!谢谢! – Peacelyk 2011-04-08 09:33:16

相关问题