为什么“ - ”(连字符)是电子邮件兼容性的唯一ASCII限制?

时间:2018-06-04 06:36:16

标签: email smtp ascii base91

我正在阅读此proposal for Base91,(我添加了粗体格式):

  

所有基于SMTP的电子邮件都可以提供与电子邮件的兼容性。所谓的与电子邮件的兼容性是将任意8位数据字节串或由电子邮件传输的任意位流数据转换为有限ASCII的字符串。对后者的主要限制是:
  (a)字符必须是可打印的;
  (b)字符不是控制字符或“ - ”(连字符)   共有94个这样的ASCII字符,它们相应的数字编码全部为32到126 ,但45 除外。以这些ASCII字符编写的电子邮件与Internet标准SMTP兼容,几乎可以在所有电子邮件系统中传输。

注意:45是连字符的ASCII值。
注意:我刚才发现该提案源自中国的专利(ZL00112884.1)和US (US6859151B2)

但是我也阅读了关于SMTP的RFC 5321,我找不到任何使连字符成为可打印ASCII范围的排他限制的内容。

注意:可打印的ASCII范围是:
!“#$%&安培;'()* +, - / 0123456789:;?< => @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\] ^ _`ABCDEFGHIJKLMNOPQRSTUVWXYZ {|}〜

为什么Base91提案/专利声称“ - ”(连字符)是电子邮件兼容性的唯一限制?

2 个答案:

答案 0 :(得分:5)

看起来连字符在多行SMTP邮件中用作控制/标记字符。

RFC5321 4.2.1 Reply Code Severities and Theory

  

多行答复的格式要求每一行,但      最后,以回复代码开头,后接连字符,      “-”(也称为减号),后跟文字。最后一行      以回复代码开头,之后紧跟<SP>(可选)      一些文本和<CRLF>。如上所述,服务器应发送<SP>      如果未发送后续文本,但客户必须为此做好准备      省略。

Base91建议使用SMTP作为其应用和限制的示例。如您所述,它最初希望使用94个字符,但是由于各种标准(例如SMTP),它不包括常用的伪控制字符(“-”,“。”,“ =“)。它使用SMTP,是因为它表明了Base91编码的实用性(例如,每个字符使用13位数据而不是使用Base64编码6位数据可以大大减少编码任何给定消息所需的位数),此外还承认其使用了连字符作为控制字符不会在Base91文本中引起歧义。

Base91可以对任何文本进行编码-该文件指出它将13位数据映射为两个可打印的ASCII字符。 Base91可以编码任何数字,任何字符(包括换行符),类似于Base64可以编码任何字符。同样,可以反转此映射,以从Base91编码生成原始输出。

这是一个多行SMTP回复代码示例:

  250-First line
  250-Second line
  250-234 Text beginning with numbers
  250 The last line

在此示例中,它将包含连字符,换行符和数字的大型多行SMTP邮件转换为某种以Base91编码的形式。如果此编码形式包含伪控制字符(例如连字符),则SMTP客户端 可以将Base91编码的数据解释为格式错误的SMTP数据。由于SMTP的缺陷或SMTP本身的规范,从Base91字符集中删除字符(例如连字符)的目的不是不是,而是使用和解析SMTP数据的客户端,并确保客户端仍然可以正确接受Base91数据,而不会将其误解为SMTP数据。

答案 1 :(得分:0)

我的怀疑只是使base91对人们有时使用文本所做的事情(例如,跨文档的复制/粘贴)具有鲁棒性。指望这种情况会经常发生并没有多大意义,但有些文字处理程序等却没有多大意义。将使用破折号作为连字符。