code: def determine_encoding(buf):
      bom_encoding = 'UTF-8'
      if not buf:
          return bom_encoding
      if isinstance(buf, six.text_type):
          if buf[0] == '\ufeff':
              buf = buf[0:]
          charset_start = '@charset "'
          charset_end = '";'
          if buf.startswith(charset_start):
              start = len(charset_start)
              end = buf.index(charset_end, start)
              return buf[start:end]
          else:
              return bom_encoding
      if buf[:3] == b'\xef\xbb\xbf':
          bom_encoding = 'UTF-8'
          buf = buf[3:]
      if buf[:4] == b'\x00\x00\xfe\xff':
          bom_encoding = 'UTF-32BE'
          buf = buf[4:]
      elif buf[:4] == b'\xff\xfe\x00\x00':
          bom_encoding = 'UTF-32LE'
          buf = buf[4:]
      if buf[:4] == b'\x00\x00\xff\xfe':
          raise UnicodeError("UTF-32-2143 is not supported")
      elif buf[:4] == b'\xfe\xff\x00\x00':
          raise UnicodeError("UTF-32-2143 is not supported")
      elif buf[:2] == b'\xfe\xff':
          bom_encoding = 'UTF-16BE'
          buf = buf[2:]
      elif buf[:2] == b'\xff\xfe':
          bom_encoding = 'UTF-16LE'
          buf = buf[2:]
      charset_start = '@charset "'.encode(bom_encoding)
      charset_end = '";'.encode(bom_encoding)
      if buf.startswith(charset_start):
          start = len(charset_start)
          end = buf.index(charset_end, start)
          encoded_encoding = buf[start:end]
          encoding = encoded_encoding.decode(bom_encoding)
          encoded_charset = buf[:end + len(charset_end)]
          if (encoded_charset.decode(encoding) !=
                  encoded_charset.decode(bom_encoding)):
              raise UnicodeError(
                  "@charset {0} is incompatible with detected encoding {1}"
                  .format(bom_encoding, encoding))
      else:
          encoding = bom_encoding
      return encoding