¿Por qué el módulo html2text lanza UnicodeDecodeError?

Tengo un problema con el módulo html2text … me muestra UnicodeDecodeError:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xbe in position 6: ordinal not in range(128) 

Ejemplo:

 #!/usr/bin/python # -*- coding: utf-8 -*- import html2text import urllib h = html2text.HTML2Text() h.ignore_links = True html = urllib.urlopen( "http://google.com" ).read() print h.handle( html ) 

… también probé h.handle( unicode( html, "utf-8" ) sin éxito. Cualquier ayuda. EDITAR:

 Traceback (most recent call last): File "test.py", line 12, in  print h.handle(html) File "/home/alex/Desktop/html2text-master/html2text.py", line 254, in handle return self.optwrap(self.close()) File "/home/alex/Desktop/html2text-master/html2text.py", line 266, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xbe in position 6: ordinal not in range(128) 

El problema es fácilmente reproducible cuando no se decodifica , pero funciona bien cuando decodificas tu fuente correctamente. ¡ También obtendrá el error si reutiliza el analizador!

Puede probar esto con una buena fuente conocida de Unicode, como http://www.ltg.ed.ac.uk/~richard/unicode-sample.html .

Si no descodifica la respuesta a unicode , la biblioteca falla:

 >>> h = html2text.HTML2Text() >>> h.handle(html) Traceback (most recent call last): File "", line 1, in  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 240, in handle return self.optwrap(self.close()) File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 252, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) 

Ahora, si reutiliza el objeto HTML2Text , su estado no se borra, aún conserva los datos incorrectos, por lo que incluso pasar unicode ahora fallará:

 >>> h.handle(html.decode('utf8')) Traceback (most recent call last): File "", line 1, in  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 240, in handle return self.optwrap(self.close()) File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 252, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) 

Necesitas usar un nuevo objeto y funcionará bien:

 >>> h = html2text.HTML2Text() >>> result = h.handle(html.decode('utf8')) >>> len(result) 12750 >>> type(result)