【问题标题】:Changing charset when retrieving messages from mail server!从邮件服务器检索消息时更改字符集!
【发布时间】:2011-07-31 20:24:08
【问题描述】:

我目前正在创建一个小型邮件客户端,但遇到了字符集问题。 我使用 indy 的 TIdIMAP4 组件从邮件服务器检索数据。当我尝试检索邮件正文时,像 ä、ü 等重音字母会分别转换为 =E4、=FC,因为它使用字符集 ISO-8859-1。

内容类型:文本/纯文本; 字符集="ISO-8859-1" 内容传输编码: 引用可打印

如何让服务器以另一个字符集(如 utf-8)向我发送数据?解决这个问题的最佳方法是什么?

提前致谢!

【问题讨论】:

    标签: delphi character-encoding indy


    【解决方案1】:

    生成=E4=FC 之类的字符串的不是charset,而是Content-Transfer-Encoding$E4$FC 是 ISO-8859-1 中 äü 的二进制表示,但它们是 8 位值。电子邮件在很大程度上仍然是一个 7 位环境。除非客户端和服务器在通信期间协商 8 位传输,否则$7F 以上的字节八位字节必须以 7 位兼容的方式编码,才能安全地通过电子邮件网关,尤其是仍然存在的遗留网关。 quoted-printable 是电子邮件中用于文本内容的常用 7 位字节编码。 base64 是另一个,但它不是人类可读的,因此它倾向于用于二进制数据而不是文本数据(尽管它可以用于文本)。

    在任何情况下,您都不能让服务器以另一种编码方式将电子邮件数据传递给您。服务器只是按原样交付发件人最初交付给它的原始电子邮件数据。如果你想要 UTF-8 格式的数据,那么你必须在下载后自己重新编码。 Indy 将为您处理解码。

    【讨论】:

    • 我使用 Indy 的 TIdDecoderQuotedPrintable 类来解码“引用的可打印”编码字符串。效果很好!谢谢!
    猜你喜欢
    • 2023-03-31
    • 2015-03-07
    • 1970-01-01
    • 2012-08-08
    • 2017-08-29
    • 2013-01-02
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多