Я полностью запутался с геей. У меня есть скрипт, который выполняет пост-запрос (используя urlfetch из API App Engine Google), в качестве ответа мы получаем html-страницу в кодировке cp1251.
Затем я декодирую его, используя .decode ('cp1251') и анализирую с lxml.
Мой код прекрасно работает на моей локальной машине:
import re
import leaf #simple wrapper for lxml
weekdaysD={u'понедельник':1, u'вторник':2, u'среда':3, u'четверг':4, u'пятница':5, u'суббота':6}
document = leaf.parse(leaf.strip_symbols(leaf.strip_accents(html_in_cp1251.decode('cp1251'))))
table=document.get('table')
trs=table('tr') #leaf syntax
for tr in trs:
tds=tr.xpath('td')
for td in tds:
if td.colspan=='3':
curweek=re.findall('\w+(?=\-)', td.text)[0]
curday=weekdaysD[td.text.split(u',')[0]]
но при развертывании в gae я получаю:
curday=weekdaysD[td.text.split(u',')[0]]
KeyError: u'\xd0\xb2\xd1\x82\xd0\xbe\xd1\x80\xd0\xbd\xd0\xb8\xd0\xba'
Как там вообще не символы Юникода? И почему все хорошо локально?
Я перепробовал все варианты размещения декодирования \ кодирования в моем коде - ничего не помогло.
Я застрял на несколько дней.
UPD: также, если я добавлю в свой скрипт на GAE:
print type(weekdaysD.keys()[0]), type(td.text.split(u',')[0])
Возвращает оба как «Юникод». Итак, я верю, что HTML был декодирован правильно. Может ли это быть что-то с lxml на GAE?