quoted-printable.rfc
上传用户:knt0001
上传日期:2022-01-28
资源大小:264k
文件大小:12k
源码类别:

Email客户端

开发平台:

C/C++

  1. 6.7.  Quoted-Printable Content-Transfer-Encoding
  2.    The Quoted-Printable encoding is intended to represent data that
  3.    largely consists of octets that correspond to printable characters in
  4.    the US-ASCII character set.  It encodes the data in such a way that
  5.    the resulting octets are unlikely to be modified by mail transport.
  6.    If the data being encoded are mostly US-ASCII text, the encoded form
  7.    of the data remains largely recognizable by humans.  A body which is
  8.    entirely US-ASCII may also be encoded in Quoted-Printable to ensure
  9.    the integrity of the data should the message pass through a
  10.    character-translating, and/or line-wrapping gateway.
  11.    In this encoding, octets are to be represented as determined by the
  12.    following rules:
  13.     (1)   (General 8bit representation) Any octet, except a CR or
  14.           LF that is part of a CRLF line break of the canonical
  15.           (standard) form of the data being encoded, may be
  16.           represented by an "=" followed by a two digit
  17.           hexadecimal representation of the octet's value.  The
  18.           digits of the hexadecimal alphabet, for this purpose,
  19.           are "0123456789ABCDEF".  Uppercase letters must be
  20.           used; lowercase letters are not allowed.  Thus, for
  21.           example, the decimal value 12 (US-ASCII form feed) can
  22.           be represented by "=0C", and the decimal value 61 (US-
  23.           ASCII EQUAL SIGN) can be represented by "=3D".  This
  24.           rule must be followed except when the following rules
  25.           allow an alternative encoding.
  26.     (2)   (Literal representation) Octets with decimal values of
  27.           33 through 60 inclusive, and 62 through 126, inclusive,
  28.           MAY be represented as the US-ASCII characters which
  29.           correspond to those octets (EXCLAMATION POINT through
  30.           LESS THAN, and GREATER THAN through TILDE,
  31.           respectively).
  32.     (3)   (White Space) Octets with values of 9 and 32 MAY be
  33.           represented as US-ASCII TAB (HT) and SPACE characters,
  34. Freed & Borenstein          Standards Track                    [Page 19]
  35. RFC 2045                Internet Message Bodies            November 1996
  36.           respectively, but MUST NOT be so represented at the end
  37.           of an encoded line.  Any TAB (HT) or SPACE characters
  38.           on an encoded line MUST thus be followed on that line
  39.           by a printable character.  In particular, an "=" at the
  40.           end of an encoded line, indicating a soft line break
  41.           (see rule #5) may follow one or more TAB (HT) or SPACE
  42.           characters.  It follows that an octet with decimal
  43.           value 9 or 32 appearing at the end of an encoded line
  44.           must be represented according to Rule #1.  This rule is
  45.           necessary because some MTAs (Message Transport Agents,
  46.           programs which transport messages from one user to
  47.           another, or perform a portion of such transfers) are
  48.           known to pad lines of text with SPACEs, and others are
  49.           known to remove "white space" characters from the end
  50.           of a line.  Therefore, when decoding a Quoted-Printable
  51.           body, any trailing white space on a line must be
  52.           deleted, as it will necessarily have been added by
  53.           intermediate transport agents.
  54.     (4)   (Line Breaks) A line break in a text body, represented
  55.           as a CRLF sequence in the text canonical form, must be
  56.           represented by a (RFC 822) line break, which is also a
  57.           CRLF sequence, in the Quoted-Printable encoding.  Since
  58.           the canonical representation of media types other than
  59.           text do not generally include the representation of
  60.           line breaks as CRLF sequences, no hard line breaks
  61.           (i.e. line breaks that are intended to be meaningful
  62.           and to be displayed to the user) can occur in the
  63.           quoted-printable encoding of such types.  Sequences
  64.           like "=0D", "=0A", "=0A=0D" and "=0D=0A" will routinely
  65.           appear in non-text data represented in quoted-
  66.           printable, of course.
  67.           Note that many implementations may elect to encode the
  68.           local representation of various content types directly
  69.           rather than converting to canonical form first,
  70.           encoding, and then converting back to local
  71.           representation.  In particular, this may apply to plain
  72.           text material on systems that use newline conventions
  73.           other than a CRLF terminator sequence.  Such an
  74.           implementation optimization is permissible, but only
  75.           when the combined canonicalization-encoding step is
  76.           equivalent to performing the three steps separately.
  77.     (5)   (Soft Line Breaks) The Quoted-Printable encoding
  78.           REQUIRES that encoded lines be no more than 76
  79.           characters long.  If longer lines are to be encoded
  80.           with the Quoted-Printable encoding, "soft" line breaks
  81. Freed & Borenstein          Standards Track                    [Page 20]
  82. RFC 2045                Internet Message Bodies            November 1996
  83.           must be used.  An equal sign as the last character on a
  84.           encoded line indicates such a non-significant ("soft")
  85.           line break in the encoded text.
  86.    Thus if the "raw" form of the line is a single unencoded line that
  87.    says:
  88.      Now's the time for all folk to come to the aid of their country.
  89.    This can be represented, in the Quoted-Printable encoding, as:
  90.      Now's the time =
  91.      for all folk to come=
  92.       to the aid of their country.
  93.    This provides a mechanism with which long lines are encoded in such a
  94.    way as to be restored by the user agent.  The 76 character limit does
  95.    not count the trailing CRLF, but counts all other characters,
  96.    including any equal signs.
  97.    Since the hyphen character ("-") may be represented as itself in the
  98.    Quoted-Printable encoding, care must be taken, when encapsulating a
  99.    quoted-printable encoded body inside one or more multipart entities,
  100.    to ensure that the boundary delimiter does not appear anywhere in the
  101.    encoded body.  (A good strategy is to choose a boundary that includes
  102.    a character sequence such as "=_" which can never appear in a
  103.    quoted-printable body.  See the definition of multipart messages in
  104.    RFC 2046.)
  105.    NOTE: The quoted-printable encoding represents something of a
  106.    compromise between readability and reliability in transport.  Bodies
  107.    encoded with the quoted-printable encoding will work reliably over
  108.    most mail gateways, but may not work perfectly over a few gateways,
  109.    notably those involving translation into EBCDIC.  A higher level of
  110.    confidence is offered by the base64 Content-Transfer-Encoding.  A way
  111.    to get reasonably reliable transport through EBCDIC gateways is to
  112.    also quote the US-ASCII characters
  113.      !"#$@[]^`{|}~
  114.    according to rule #1.
  115.    Because quoted-printable data is generally assumed to be line-
  116.    oriented, it is to be expected that the representation of the breaks
  117.    between the lines of quoted-printable data may be altered in
  118.    transport, in the same manner that plain text mail has always been
  119.    altered in Internet mail when passing between systems with differing
  120.    newline conventions.  If such alterations are likely to constitute a
  121. Freed & Borenstein          Standards Track                    [Page 21]
  122. RFC 2045                Internet Message Bodies            November 1996
  123.    corruption of the data, it is probably more sensible to use the
  124.    base64 encoding rather than the quoted-printable encoding.
  125.    NOTE: Several kinds of substrings cannot be generated according to
  126.    the encoding rules for the quoted-printable content-transfer-
  127.    encoding, and hence are formally illegal if they appear in the output
  128.    of a quoted-printable encoder. This note enumerates these cases and
  129.    suggests ways to handle such illegal substrings if any are
  130.    encountered in quoted-printable data that is to be decoded.
  131.     (1)   An "=" followed by two hexadecimal digits, one or both
  132.           of which are lowercase letters in "abcdef", is formally
  133.           illegal. A robust implementation might choose to
  134.           recognize them as the corresponding uppercase letters.
  135.     (2)   An "=" followed by a character that is neither a
  136.           hexadecimal digit (including "abcdef") nor the CR
  137.           character of a CRLF pair is illegal.  This case can be
  138.           the result of US-ASCII text having been included in a
  139.           quoted-printable part of a message without itself
  140.           having been subjected to quoted-printable encoding.  A
  141.           reasonable approach by a robust implementation might be
  142.           to include the "=" character and the following
  143.           character in the decoded data without any
  144.           transformation and, if possible, indicate to the user
  145.           that proper decoding was not possible at this point in
  146.           the data.
  147.     (3)   An "=" cannot be the ultimate or penultimate character
  148.           in an encoded object.  This could be handled as in case
  149.           (2) above.
  150.     (4)   Control characters other than TAB, or CR and LF as
  151.           parts of CRLF pairs, must not appear. The same is true
  152.           for octets with decimal values greater than 126.  If
  153.           found in incoming quoted-printable data by a decoder, a
  154.           robust implementation might exclude them from the
  155.           decoded data and warn the user that illegal characters
  156.           were discovered.
  157.     (5)   Encoded lines must not be longer than 76 characters,
  158.           not counting the trailing CRLF. If longer lines are
  159.           found in incoming, encoded data, a robust
  160.           implementation might nevertheless decode the lines, and
  161.           might report the erroneous encoding to the user.
  162. Freed & Borenstein          Standards Track                    [Page 22]
  163. RFC 2045                Internet Message Bodies            November 1996
  164.    WARNING TO IMPLEMENTORS:  If binary data is encoded in quoted-
  165.    printable, care must be taken to encode CR and LF characters as "=0D"
  166.    and "=0A", respectively.  In particular, a CRLF sequence in binary
  167.    data should be encoded as "=0D=0A".  Otherwise, if CRLF were
  168.    represented as a hard line break, it might be incorrectly decoded on
  169.    platforms with different line break conventions.
  170.    For formalists, the syntax of quoted-printable data is described by
  171.    the following grammar:
  172.      quoted-printable := qp-line *(CRLF qp-line)
  173.      qp-line := *(qp-segment transport-padding CRLF)
  174.                 qp-part transport-padding
  175.      qp-part := qp-section
  176.                 ; Maximum length of 76 characters
  177.      qp-segment := qp-section *(SPACE / TAB) "="
  178.                    ; Maximum length of 76 characters
  179.      qp-section := [*(ptext / SPACE / TAB) ptext]
  180.      ptext := hex-octet / safe-char
  181.      safe-char := <any octet with decimal value of 33 through
  182.                   60 inclusive, and 62 through 126>
  183.                   ; Characters not listed as "mail-safe" in
  184.                   ; RFC 2049 are also not recommended.
  185.      hex-octet := "=" 2(DIGIT / "A" / "B" / "C" / "D" / "E" / "F")
  186.                   ; Octet must be used for characters > 127, =,
  187.                   ; SPACEs or TABs at the ends of lines, and is
  188.                   ; recommended for any character not listed in
  189.                   ; RFC 2049 as "mail-safe".
  190.      transport-padding := *LWSP-char
  191.                           ; Composers MUST NOT generate
  192.                           ; non-zero length transport
  193.                           ; padding, but receivers MUST
  194.                           ; be able to handle padding
  195.                           ; added by message transports.
  196.    IMPORTANT:  The addition of LWSP between the elements shown in this
  197.    BNF is NOT allowed since this BNF does not specify a structured
  198.    header field.