python3 last jinja for comment python google-app-engine unicode jinja2 python-unicode

last - jinja2 python3



Google App Engine: UnicodeDecodeError: el códec ''ascii'' no puede decodificar byte 0xe2 en la posición 48: ordinal no está en rango(128) (2)

Estoy trabajando en una pequeña aplicación que utiliza Google App Engine que hace uso de la fuente RSS de Quora. Hay un formulario, y basado en la entrada ingresada por el usuario, dará como resultado una lista de enlaces relacionados con la entrada. Ahora, las aplicaciones funcionan bien para consultas de una letra y la mayoría de palabras de dos letras si las palabras están separadas por ''-''. Sin embargo, para palabras de tres letras y algunas palabras de dos letras, aparece el siguiente error:

UnicodeDecodeError: el códec ''ascii'' no puede decodificar el byte 0xe2 en la posición 48: el ordinal no está dentro del rango (128)

Aquí está mi código de 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)

Aquí está el código 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 %}


En mi aplicación de AppEngine, la convierto como:

content = unicode(content)

Creo que es más claro y fácil de usar.


Es probable que Python intente decodificar una cadena unicode en una cadena normal con el códec ascii y está fallando. Cuando trabajas con datos Unicode necesitas decodificarlo:

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