code: def safe_encode(text, incoming=None,
                  encoding='utf-8', errors='strict'):
      
      if not isinstance(text, (six.string_types, six.binary_type)):
          raise TypeError("%s can't be encoded" % type(text))
  
      if not incoming:
          incoming = (sys.stdin.encoding or
                      sys.getdefaultencoding())
  
      if isinstance(text, six.text_type):
          return text.encode(encoding, errors)
      elif text and encoding != incoming:
          # Decode text before encoding it with `encoding`
          text = safe_decode(text, incoming, errors)
          return text.encode(encoding, errors)
      else:
          return text
docs: Encodes incoming text/bytes string using `encoding`.
  
      If incoming is not specified, text is expected to be encoded with
      current python's default encoding. (`sys.getdefaultencoding`)
  
      :param incoming: Text's current encoding
      :param encoding: Expected encoding for text (Default UTF-8)
      :param errors: Errors handling policy. See here for valid
          values http://docs.python.org/2/library/codecs.html
      :returns: text or a bytestring `encoding` encoded
                  representation of it.
      :raises TypeError: If text is not an instance of str