UnicodeEncodeError при извлечении URL

У меня возникла эта проблема при попытке получить все текстовые узлы в HTML-документе с помощью lxml, но я получаю UnicodeEncodeError: кодек ascii не может кодировать символ u'\ xe9' в позиции 8995: порядковый номер не в диапазоне(128). Однако, когда я пытаюсь выяснить тип кодировки этой страницы (encoding = chardet.detect(response)['encoding']), он говорит, что это utf-8. Кажется странным, что на одной странице есть utf-8 и ascii. На самом деле, это:

fromstring(response).text_content().encode('ascii', 'replace')

решает проблему.

Вот мой код:

from lxml.html import fromstring
import urllib2
import chardet
request = urllib2.Request(my_url)
request.add_header('User-Agent',
                   'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')   
request.add_header("Accept-Language", "en-us")
response = urllib2.urlopen(request).read()

print encoding
print fromstring(response).text_content()

Вывод:

utf-8
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8995: ordinal not in range(128)

Что я могу сделать, чтобы решить эту проблему? Имейте в виду, что я хочу сделать это с несколькими другими страницами, поэтому я не хочу кодировать по отдельности.

ОБНОВЛЕНИЕ :

Возможно, здесь происходит что-то еще. Я запускаю этот скрипт на терминале, я получаю правильный вывод, но когда я запускаю его внутри SublimeText, я получаю UnicodeEncodeError... ¿?

UPDATE2:

Это также происходит, когда я создаю файл с этим выводом. .encode('ascii', 'replace')работает, но я хотел бы иметь более общее решение.

С уважением

9
задан Robert Smith 16 June 2012 в 18:08
поделиться