Подтвердить что ты не робот

Google App Engine: UnicodeDecodeError: кодек ascii не может декодировать байт 0xe2 в позиции 48: порядковый номер не в диапазоне (128)

Я работаю над небольшим приложением, использующим Google App Engine, который использует RSS-канал Quora. Существует форма и на основе ввода, введенного пользователем, он выведет список ссылок, связанных с вводом. Теперь приложения отлично работают для однобуквенных запросов и большинства двухбуквенных слов, если слова разделены символом "-". Однако для трехбуквенных слов и некоторых двухбуквенных слов я получаю следующую ошибку:

UnicodeDecodeError: кодек 'ascii' не может декодировать байт 0xe2 в позиции 48: порядковый номер не в диапазоне (128)

Здесь мой код Python:

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('<title>(.*?)</title>')
        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-код:

<h1>Quora Live Feed</h1><br><br><br>

{% extends "rssbase.html" %}

{% block content %}
    {% for e in range(1, 19) %}
        {{ (list[e]) }} <br>
        <a href="{{ linklist[e] }}">{{ linklist[e] }}</a>
        <br><br>
    {% endfor %}
{% endblock %}
4b9b3361

Ответ 1

Python вероятно пытается декодировать строку юникода в обычную str с кодеком ascii и не работает. Когда вы работаете с данными в Unicode, вам необходимо его декодировать:

content = content.decode('utf-8')

Ответ 2

В моем приложении AppEngine я конвертирую его так:

content = unicode(content)

Я думаю, что это более понятно и легко использовать.