old_contents: import codecs
  import locale
  import re
  
  
  BOMS = [
      (codecs.BOM_UTF8, 'utf8'),
      (codecs.BOM_UTF16, 'utf16'),
      (codecs.BOM_UTF16_BE, 'utf16-be'),
      (codecs.BOM_UTF16_LE, 'utf16-le'),
      (codecs.BOM_UTF32, 'utf32'),
      (codecs.BOM_UTF32_BE, 'utf32-be'),
      (codecs.BOM_UTF32_LE, 'utf32-le'),
  ]
  
  ENCODING_RE = re.compile('coding[:=]\s*([-\w.]+)')
  
  
  def auto_decode(data):
      """Check a bytes string for a BOM to correctly detect the encoding
  
      Fallback to locale.getpreferredencoding(False) like open() on Python3"""
      for bom, encoding in BOMS:
          if data.startswith(bom):
              return data[len(bom):].decode(encoding)
      # Lets check the first two lines as in PEP263
      for line in data.splitlines()[:2]:
          if line.startswith('#') and ENCODING_RE.search(line):
              encoding = ENCODING_RE.search(line).groups()[0]
              return data.decode(encoding)
      return data.decode(locale.getpreferredencoding(False))
  
new_contents: import codecs
  import locale
  import re
  
  
  BOMS = [
      (codecs.BOM_UTF8, 'utf8'),
      (codecs.BOM_UTF16, 'utf16'),
      (codecs.BOM_UTF16_BE, 'utf16-be'),
      (codecs.BOM_UTF16_LE, 'utf16-le'),
      (codecs.BOM_UTF32, 'utf32'),
      (codecs.BOM_UTF32_BE, 'utf32-be'),
      (codecs.BOM_UTF32_LE, 'utf32-le'),
  ]
  
  ENCODING_RE = re.compile(b'coding[:=]\s*([-\w.]+)')
  
  
  def auto_decode(data):
      """Check a bytes string for a BOM to correctly detect the encoding
  
      Fallback to locale.getpreferredencoding(False) like open() on Python3"""
      for bom, encoding in BOMS:
          if data.startswith(bom):
              return data[len(bom):].decode(encoding)
      # Lets check the first two lines as in PEP263
      for line in data.split(b'\n')[:2]:
          if line[0:1] == b'#' and ENCODING_RE.search(line):
              encoding = ENCODING_RE.search(line).groups()[0].decode('ascii')
              return data.decode(encoding)
      return data.decode(locale.getpreferredencoding(False))
  
subject: Fix for bytes magic