def detect_encoding(readline):
 bom_found = False
 encoding = None
 default = 'utf-8'
 def read_or_stop():
  try:
   return readline()
  except StopIteration:
   return bytes()
 def find_cookie(line):
  try:
   line_string = line.decode('ascii')
  except UnicodeDecodeError:
   return None
  match = cookie_re.match(line_string)
  if (not match):
   return None
  encoding = _get_normal_name(match.group(1))
  try:
   codec = lookup(encoding)
  except LookupError:
   raise SyntaxError(('unknown encoding: ' + encoding))
  if bom_found:
   if (codec.name != 'utf-8'):
    raise SyntaxError('encoding problem: utf-8')
   encoding += '-sig'
  return encoding
 first = read_or_stop()
 if first.startswith(BOM_UTF8):
  bom_found = True
  first = first[3:]
  default = 'utf-8-sig'
 if (not first):
  return (default, [])
 encoding = find_cookie(first)
 if encoding:
  return (encoding, [first])
 second = read_or_stop()
 if (not second):
  return (default, [first])
 encoding = find_cookie(second)
 if encoding:
  return (encoding, [first, second])
 return (default, [first, second])

def detect_encoding ( readline ) : bom_found = False encoding = None default = 'utf-8' def read_or_stop ( ) : try : return readline ( ) except StopIteration : return bytes ( ) def find_cookie ( line ) : try : line_string = line . decode ( 'ascii' ) except UnicodeDecodeError : return None match = cookie_re . match ( line_string ) if ( not match ) : return None encoding = _get_normal_name ( match . group ( 1 ) ) try : codec = lookup ( encoding ) except LookupError : raise SyntaxError ( ( 'unknown encoding: ' + encoding ) ) if bom_found : if ( codec . name != 'utf-8' ) : raise SyntaxError ( 'encoding problem: utf-8' ) encoding += '-sig' return encoding first = read_or_stop ( ) if first . startswith ( BOM_UTF8 ) : bom_found = True first = first [ 3 : ] default = 'utf-8-sig' if ( not first ) : return ( default , [ ] ) encoding = find_cookie ( first ) if encoding : return ( encoding , [ first ] ) second = read_or_stop ( ) if ( not second ) : return ( default , [ first ] ) encoding = find_cookie ( second ) if encoding : return ( encoding , [ first , second ] ) return ( default , [ first , second ] )
return file encoding .