7bit传输编码与UTF-7,以及8bit与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;
}
引用RFC1341:
值"8bit", "7bit"answers"binary"都表示没有进行编码…"8bit"表示行很短,但可能存在非ascii字符(具有高阶位集的八位元组)。
这意味着7bit是纯ascii,您根本不需要将其转换为UTF-8(因此在这种情况下不需要使用mb_convert_encoding()
)。'8bit'意味着可能存在非ascii字符,但据我所知,它不一定是UTF-8字符集编码-可能是iso-8859-1或其他什么。所以AFAIK '8bit'并不自动表示UTF-8。