关于python:Google App Engine:UnicodeDecodeError:’ascii’编解码器无法解码位置48的字节0xe2:序号不在范围内(128)

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)

我觉得它更清晰,更容易使用。