在输出之前是否必须解码7位和8位编码的消息?

sen*_*pai 5 php encoding imap

7位传输编码和UTF-7之间以及8位和UTF-8之间可能存在什么关系?

手动将邮件正文编码转换为预期的编码(假设为'utf-8')是否有意义,如下面的代码所示?

 function decodeBody($body, $transferEncoding, $bodyEncoding) {

        switch ($transferEncoding) { 

            case '7BIT' :
            case '8BIT' :   
                                    // any additional decoding here ?
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;


            case 'BASE64' :
                $body = base64_decode($body);
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;

            case 'QUOTED_PRINTABLE' :
                $body = quoted_printable_decode($body);
                $body = mb_convert_encoding($body, 'utf-8', $bodyEncoding);
            break;

        }

        return $body;
    }
Run Code Online (Sandbox Code Playgroud)

TMS*_*TMS 3

引用RFC1341

值“8bit”、“7bit”和“binary”都表示未执行任何编码...“8bit”表示行很短,但可能存在非 ASCII 字符(具有高位的八位字节)位设置)。

这意味着 7bit 是纯 ascii,您根本不需要将其转换为 UTF-8(因此mb_convert_encoding()在这种情况下无需使用)。“8bit”意味着可能存在非ascii字符,但据我了解,它不一定是UTF-8字符集编码——可能是iso-8859-1或其他字符。所以据我所知“8bit”并不自动意味着UTF-8。