code: def decode_header(header):
      """Decode a message header value without converting charset.
  
      Returns a list of (decoded_string, charset) pairs containing each of the
      decoded parts of the header.  Charset is None for non-encoded parts of the
      header, otherwise a lower-case string containing the name of the character
      set specified in the encoded string.
  
      An email.errors.HeaderParseError may be raised when certain decoding error
      occurs (e.g. a base64 decoding exception).
      """
      # If no encoding, just return the header
      header = str(header)
      if not ecre.search(header):
          return [(header, None)]
      decoded = []
      dec = ""
      for line in header.splitlines():
          # This line might not have an encoding in it
          if not ecre.search(line):
              decoded.append((line, None))
              continue
          parts = ecre.split(line)
          while parts:
              unenc = parts.pop(0).strip()
              if unenc:
                  # Should we continue a long line?
                  if decoded and decoded[-1][1] is None:
                      decoded[-1] = (
                          decoded[-1][0] + SPACE + unenc,
                          None,
                      )
                  else:
                      decoded.append((unenc, None))
              if parts:
                  charset, encoding = [s.lower() for s in parts[0:2]]
                  encoded = parts[2]
                  dec = None
                  if encoding == "q":
                      dec = email.quoprimime.header_decode(encoded)
                  elif encoding == "b":
                      paderr = (
                          len(encoded) % 4
                      )  # Postel's law: add missing padding
                      if paderr:
                          encoded += "==="[: 4 - paderr]
                      try:
                          dec = email.base64mime.decode(encoded)
                      except binascii.Error:
                          # Turn this into a higher level exception.  BAW: Right
                          # now we throw the lower level exception away but
                          # when/if we get exception chaining, we'll preserve it.
                          raise HeaderParseError
                  if dec is None:
                      dec = encoded
  
                  if decoded and decoded[-1][1] == charset:
                      decoded[-1] = (
                          decoded[-1][0] + dec,
                          decoded[-1][1],
                      )
                  else:
                      decoded.append((dec, charset))
              del parts[0:3]
      return decoded
  
imports: import re
  import binascii
  import email.quoprimime
  import email.base64mime
  from email.errors import HeaderParseError
  from email.charset import Charset
label_desc: Use image node_id 1 for calling a global function with example usage: decode_header(header) and returns: decoded, list