2011-07-27 32 views
5

7bit传输编码和UTF-7以及8bit和UTF-8之间可能的关系是什么?7位和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; 
    } 
+0

你可能想要阅读的东西:http://www.joelonsoftware.com/articles/Unicode.html Quote:有一些名为UTF-7,这很像UTF-8,但保证高位会总是为零' –

回答

3

引述RFC1341

值“8位”,“7位”,和“二进制”所有暗示NO编码已经被执行... “8位”是指该行是简而言之,但可能存在非ASCII字符(设置了高位比特的八位字节)。

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

+0

如果这是我正在寻找的答案,我并不确定:7位编码意味着8位字符以“= F6”编码(例如)。这当然是一个编码,必须解码才能打印到网站或其他东西。 – iRaS