Вы говорите:
Символ, вызывающий проблему: å,
Откуда ты это знаешь? С чем вы просматриваете текст?
Таким образом, вы не можете опубликовать URL и ваш ключ API; как насчет чтения данных, записи их в файл (в двоичном режиме) и публикации этого?
Когда вы открываете этот файл в веб-браузере, какую кодировку он обнаруживает?
Как минимум, сделайте это
data.decode('utf8') # where data is what you get from ur.read()
Это создаст исключение, которое сообщит вам о смещении в байтах материала, отличного от UTF-8.
Тогда сделайте это:
print repr(data[offset-10:offset+60])
и покажите нам результаты.
Предполагая, что кодировка на самом деле cp1252
и декодируя байты в сообщении об ошибке lxml:
>>> guff = "\xEA\x76\x65\x73"
>>> from unicodedata import name
>>> [name(c) for c in guff.decode('1252')]
['LATIN SMALL LETTER E WITH CIRCUMFLEX', 'LATIN SMALL LETTER V', 'LATIN SMALL LE
TTER E', 'LATIN SMALL LETTER S']
>>>
Значит, вы видите электронный круг с последующим ves
, или a-ring с последующим ves
, или a-ring с последующим чем-то другим?
Данные начинаются с объявления XML, например <?xml version="1.0" encoding="UTF-8"?>
? Если нет, то с чего начать?
Подсказки для кодирования угадывания / подтверждения: на каком языке написан текст? В какой стране?
ОБНОВЛЕНИЕ на основе предоставленной дополнительной информации.
Основываясь на фрагменте, который вы показали в непосредственной близости от ошибки, название фильма "La science des rêves" (наука о сновидениях).
Забавно, как PHP увлекается "F *** ing Åmål", но Python душит французские мечты. Вы уверены, что сделали тот же запрос?
Вы должны были сказать нам, что это IMDB, вы бы получили ответ намного раньше.
РЕШЕНИЕ перед тем как передать data
парсеру lxml
, сделайте следующее:
data = data.replace('encoding="UTF-8"', 'encoding="iso-8859-1"')
Это основано на кодировке, которую они объявляют на своем сайте, но это тоже может быть ложью. В этом случае попробуйте cp1252
. Это определенно не iso-8859-2 .