Google App Engine: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 48: ordinal not in range(128)
我正在开发一个使用谷歌应用引擎的小应用程序,它利用了QuoraRSS源。有一个表单,根据用户输入的输入,它将输出与输入相关的链接列表。现在,对于一个字母查询和两个字母单词中的大多数,如果单词之间用"-"分隔,应用程序可以正常工作。但是,对于三个字母的单词和一些两个字母的单词,我得到以下错误:
unicodedecodeerror:"ascii"编解码器无法在位置48中解码字节0xe2:序号不在范围(128)内。
下面是我的python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import os import webapp2 import jinja2 from google.appengine.ext import db import urllib2 import re template_dir = os.path.join(os.path.dirname(__file__), 'templates') jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True) class Handler(webapp2.RequestHandler): def write(self, *a, **kw): self.response.out.write(*a, **kw) def render_str(self, template, **params): t = jinja_env.get_template(template) return t.render(params) def render(self, template, **kw): self.write(self.render_str(template, **kw)) class MainPage(Handler): def get(self): self.render("formrss.html") def post(self): x = self.request.get("rssquery") url ="http://www.quora.com/" + x +"/rss" content = urllib2.urlopen(url).read() allTitles = re.compile('(.*?)') allLinks = re.compile('<link>(.*?)</link>') list = re.findall(allTitles,content) linklist = re.findall(allLinks,content) self.render("frontrss.html", list = list, linklist = linklist) app = webapp2.WSGIApplication([('/', MainPage)], debug=True) |
这是HTML代码:
1 2 3 4 5 6 7 8 9 10 11 | Quora Live Feed {% extends"rssbase.html" %} {% block content %} {% for e in range(1, 19) %} {{ (list[e]) }} {{ linklist[e] }} {% endfor %} {% endblock %} |
python很可能试图用ascii编解码器将一个unicode字符串解码成一个普通的str,但失败了。使用Unicode数据时,需要对其进行解码:
1 | content = content.decode('utf-8') |
在Appengine应用程序中,我将其转换为:
1 | content = unicode(content) |
我觉得它更清晰,更容易使用。