Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SMTP是否传输7位或8位字符(是否清除MSB?)_Smtp_8 Bit_7 Bit - Fatal编程技术网

SMTP是否传输7位或8位字符(是否清除MSB?)

SMTP是否传输7位或8位字符(是否清除MSB?),smtp,8-bit,7-bit,Smtp,8 Bit,7 Bit,我的理解是,最初的SMTP协议被定义为仅使用7位来限制字符传输,以节省传输成本 该协议已有近40年的历史,从那时起,多个RFC扩展了标准 出于兼容性原因,许多(如果不是大多数现代的)8位干净的服务器都会将消息转换为“7位兼容”的格式,如quoted printable或base64 所以从技术上讲,所有字符都是7位ASCII码 然而,我的问题的关键是,即使数据以7位友好的方式编码,这是否意味着SMTP服务器之间的位物理传输以7位为单位,还是以8位为单位 我的假设是,即使数据是用ASCII编码的,

我的理解是,最初的SMTP协议被定义为仅使用7位来限制字符传输,以节省传输成本

该协议已有近40年的历史,从那时起,多个RFC扩展了标准

出于兼容性原因,许多(如果不是大多数现代的)8位干净的服务器都会将消息转换为“7位兼容”的格式,如quoted printable或base64

所以从技术上讲,所有字符都是7位ASCII码

然而,我的问题的关键是,即使数据以7位友好的方式编码,这是否意味着SMTP服务器之间的位物理传输以7位为单位,还是以8位为单位

我的假设是,即使数据是用ASCII编码的,也会以8位发生。这是正确的吗

以下是我找到的一些相关链接:


我认为您要问的是:“SMTP客户端在向SMTP服务器发送邮件时是否会移动位,使每个字符仅使用7位,而第8位是下一个字符的开头?”

如果是这样的话,就不会了。情况从来没有这样过

从一开始,SMTP客户端/服务器就始终使用每个字符的所有8位

换句话说,SMTP客户端和服务器使用ASCII字符编码,该编码不包括8位字符编码(如ISO-8859-1)中的重音字符。ASCII编码中值大于127的字符被视为未定义字符

原因可能有很多:

  • ASCII很容易支持
  • 每个语言环境都有自己的首选扩展字符编码,与其他语言环境不兼容,其中一些语言环境需要超过一个字节来表示字符
  • 我不确定UTF-8是否存在(但我认为多字节unicode确实存在,例如UCS2/UTF-16)
  • 期望如此多的软件来实现所有广泛使用的字符集之间的字符集转换是困难和不现实的(unicode和字符集转换库在当时并不是那么广泛可用)
  • MIME、SMTP等之前的“消息”规范是为美国“互联网”编写的,可能不需要ASCII以外的任何内容(因此,原始消息规范(如rfc0822和更早版本)没有定义编码机制

  • 谢谢@jstedfast。我已将你的答案标记为正确,因为它确实回答了我问题的主要部分。然而,我想我试图传达的是SMTP服务器是否仍然清除八位字节中的MSB?不是他们是否会传输7位单元,因为我同意这从未发生过。因此,我的问题应该细化为:今天的SMTP服务器是否清除高位,并仅使用7位对7位ASCII进行编码,或者它们实际上使用完整的八位字节,有时赋予MSB以意义?我认为它们从未清除MSB。我认为这只是一个问题,因为根据系统的区域设置字符集的不同,可能会对其进行不同的解释。不过,不要引用我的话。我只是不认为程序员会去努力清除MSB。RFC788一字不差地说:“每个7位字符在一个8位字节(或八位字节)中正确传输,高阶位清除为零。”对,但这只是描述了“7bit”的含义。这并不意味着SMTP协议的服务器实现在从客户端接收数据时清除MSB。在RFC1428:>中,这将表明在旧的7位实现中,SMTP网关确实会清除MSB事实?