【问题标题】:Decode an UTF8 email header解码 UTF8 电子邮件标头
【发布时间】:2010-09-12 16:02:45
【问题描述】:

我有一个表单的电子邮件主题:

=?utf-8?B?T3.....?=

电子邮件的正文采用 utf-8 base64 编码 - 解码良好。 我目前正在使用 Perl 的 Email::MIME 模块来解码电子邮件。

=?utf-8 分隔符是什么意思,如何从这个字符串中提取信息?

【问题讨论】:

    标签: perl email utf-8 header


    【解决方案1】:

    MIME::Words 来自 MIME-tools 也可以很好地解决这个问题。我在使用 Encode 时遇到了一些问题,发现 MIME::Words 在一些 Encode 没有成功的字符串上成功。

    use MIME::Words qw(:all);
    $decoded = decode_mimewords(
        'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>',
    );
    

    【讨论】:

      【解决方案2】:

      encoded-word 标记(根据RFC 2047)可以出现在某些标头的值中。解析如下:

      =?<charset>?<encoding>?<data>?=
      

      在这种情况下,字符集是 UTF-8,编码是 B,意思是 base64(另一个选项是 Q,意思是 Quoted Printable)。

      要读取它,首先解码 base64,然后将其视为 UTF-8 字符。

      还可以阅读各种 Internet 邮件 RFC 了解更多详细信息,主要是 RFC 2047

      由于您使用的是 Perl,Encode::MIME::Header 可能有用:

      概要

      use Encode qw/encode decode/;
      $utf8   = decode('MIME-Header', $header);
      $header = encode('MIME-Header', $utf8);
      

      摘要

      此模块实现 RFC 2047 Mime 标头编码。有 3 种变体 编码名称; MIME 标头,MIME-B 和 MIME-Q。不同的是 如下所述

                    decode()          encode()  
      MIME-Header   Both B and Q      =?UTF-8?B?....?=  
      MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
      MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=
      

      【讨论】:

        【解决方案3】:

        我认为 Encode 模块使用 MIME-Header 编码处理这个问题,所以试试这个:

        use Encode qw(decode);
        my $decoded = decode("MIME-Header", $encoded);
        

        【讨论】:

        • 这很有帮助,谢谢。顺便说一句,我还使用 print encode('utf-8', $headers_decoded) 来正确显示解码的标题,如果其他人在编写一些邮件脚本时正在阅读这个。
        【解决方案4】:

        这是标题字符集标签的标准扩展,在RFC2047 中指定。

        【讨论】:

          【解决方案5】:

          查看RFC2047。 'B' 表示最后两个 '?' 之间的部分是 base64 编码的。 'utf-8' 自然意味着解码后的数据应该被解释为 UTF-8。

          【讨论】:

            猜你喜欢
            • 2012-10-07
            • 2020-09-18
            • 2018-02-23
            • 2016-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-21
            • 2015-07-26
            相关资源
            最近更新 更多