2011-07-27 68 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