Cambiar el tipo de byte de Python a cadena

Estoy usando python para jugar con la API stackoverflow. Ejecuto los siguientes comandos:

f = urllib.request.urlopen('http://api.stackoverflow.com/1.0/stats') d = f.read() 

El tipo de d es la clase ‘bytes’ y si lo imprimo parece:

 b'\x1f\x8b\x08\x00\x00\x00 .... etc 

Intenté d=f.read().decode('utf-8') ya que ese es el juego de caracteres indicado en el encabezado, pero recibo un 'utf8' codec can't decode byte 0x8b in position 1" mensaje de error

¿Cómo convierto el objeto byte que recibí de mi llamada urllib.request a una cadena?

Asegúrese de que su cuerpo de respuesta no esté comprimido. Creo que su encoding de transferencia o tal para el encabezado de respuesta, tengo una gran confianza en que está tratando con datos comprimidos y no con problemas de encoding de juegos de caracteres.

actualización: Al darme cuenta, tengo el mal hábito de no explicar / proporcionar suficientes detalles. Para las cadenas de bytes gzip’d de Python, siempre comienzan con 1f8b. Alguien lo explica mejor aquí https://stackoverflow.com/a/3703300/9908