code: def decode(text):
      
      try:
          if text.startswith(BOM_UTF8):
              # UTF-8 with BOM
              return to_text_string(text[len(BOM_UTF8):], 'utf-8'), 'utf-8-bom'
          elif text.startswith(BOM_UTF16):
              # UTF-16 with BOM
              return to_text_string(text[len(BOM_UTF16):], 'utf-16'), 'utf-16'
          elif text.startswith(BOM_UTF32):
              # UTF-32 with BOM
              return to_text_string(text[len(BOM_UTF32):], 'utf-32'), 'utf-32'
          coding = get_coding(text)
          if coding:
              return to_text_string(text, coding), coding
      except (UnicodeError, LookupError):
          pass
      # Assume UTF-8
      try:
          return to_text_string(text, 'utf-8'), 'utf-8-guessed'
      except (UnicodeError, LookupError):
          pass
      # Assume Latin-1 (behaviour before 3.7.1)
      return to_text_string(text, "latin-1"), 'latin-1-guessed'
docs: Function to decode a text.
      @param text text to decode (string)
      @return decoded text and encoding