text: # Copyright (C) 2001-2006 Python Software Foundation
  # Author: Barry Warsaw
  # Contact: email-sig@python.org
  
  """Encodings and related functions."""
  
  __all__ = [
      'encode_7or8bit',
      'encode_base64',
      'encode_noop',
      'encode_quopri',
      ]
  
  
  from base64 import encodebytes as _bencode
  from quopri import encodestring as _encodestring
  
  
  
  def _qencode(s):
      enc = _encodestring(s, quotetabs=True)
      # Must encode spaces, which quopri.encodestring() doesn't do
      return enc.replace(b' ', b'=20')
  
  
  def encode_base64(msg):
      """Encode the message's payload in Base64.
  
      Also, add an appropriate Content-Transfer-Encoding header.
      """
      orig = msg.get_payload(decode=True)
      encdata = str(_bencode(orig), 'ascii')
      msg.set_payload(encdata)
      msg['Content-Transfer-Encoding'] = 'base64'
  
  
  
  def encode_quopri(msg):
      """Encode the message's payload in quoted-printable.
  
      Also, add an appropriate Content-Transfer-Encoding header.
      """
      orig = msg.get_payload(decode=True)
      encdata = _qencode(orig)
      msg.set_payload(encdata)
      msg['Content-Transfer-Encoding'] = 'quoted-printable'
  
  
  
  def encode_7or8bit(msg):
      """Set the Content-Transfer-Encoding header to 7bit or 8bit."""
      orig = msg.get_payload(decode=True)
      if orig is None:
          # There's no payload.  For backwards compatibility we use 7bit
          msg['Content-Transfer-Encoding'] = '7bit'
          return
      # We play a trick to make this go fast.  If encoding/decode to ASCII
      # succeeds, we know the data must be 7bit, otherwise treat it as 8bit.
      try:
          if isinstance(orig, str):
              orig.encode('ascii')
          else:
              orig.decode('ascii')
      except UnicodeError:
          charset = msg.get_charset()
          output_cset = charset and charset.output_charset
          # iso-2022-* is non-ASCII but encodes to a 7-bit representation
          if output_cset and output_cset.lower().startswith('iso-2022-'):
              msg['Content-Transfer-Encoding'] = '7bit'
          else:
              msg['Content-Transfer-Encoding'] = '8bit'
      else:
          msg['Content-Transfer-Encoding'] = '7bit'
  
  
  
  def encode_noop(msg):
      """Do nothing."""
  