0

我完全对gae感到困惑。我有一个脚本,它执行一个发布请求(使用来自 Google App Engine api 的 urlfetch)作为响应,我们得到一个 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'

那里的非 unicode 字符如何?为什么本地一切正常?我已经尝试了在我的代码中放置的所有解码\编码变体 - 没有任何帮助。我现在被困了几天。

UPD:另外,如果我在 GAE 上添加到我的脚本:

print type(weekdaysD.keys()[0]), type(td.text.split(u',')[0]) 

它以“unicode”的形式返回。所以,我相信 html 被正确解码。会不会是 GAE 上的 lxml ?

4

2 回答 2

1

您在错误消息中得到的那个字符串的类型具有 unicode,但内容实际上是 вторник 的 UTF-8 编码的字节。如果您向我们展示执行 urlfetch 调用的代码,将会很有帮助,因为您展示的代码没有任何问题。

于 2012-03-21T17:16:29.717 回答
0

好吧,添加 .encode('latin1').decode('utf-8', 'ignore') 的解决方法就成功了。我希望我能解释为什么它会这样。

于 2012-03-29T09:22:44.193 回答