私は完全にgaeと混同しました。応答として(Google App Engine APIからのurlfetchを使用して)POSTリクエストを実行するスクリプトがあり、cp1251でエンコードされたhtmlページを取得します。
次に、.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'
非ユニコード文字はどうですか?そして、なぜすべてがローカルで大丈夫なのですか?私は自分のコードに配置するdecoding\encodingのすべてのバリエーションを試しました-何も役に立ちませんでした。私は今数日間立ち往生しています。
UPD:また、GAEのスクリプトに追加すると:
print type(weekdaysD.keys()[0]), type(td.text.split(u',')[0])
両方を「unicode」として返します。だから、私はhtmlが正しくデコードされたと信じています。それはGAEのlxmlで何かでしょうか?