Je suis en train de créer une application Web à l'aide de Flask et de Google App Engine. L'une des pages de cette application Web passe un appel via les API de YouTube pour obtenir des vidéos avec un terme de recherche.
Je reçois le message d'erreur suivant lorsque j'essaie d'interroger YoutubeVids.html
.
Cela ne se produit que lorsque je transmets à la page un certain paramètre via les modèles Jinja2.
file "/Users/xxxxx/App-Engine/src/templates/YoutubeVids.html", line 1, in top-level template code
{% extends "master.html" %}
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
INFO 2014-01-27 22:39:40,963 module.py:612] default: "GET /xxx/yyyy HTTP/1.1" 500 291
Deviner.
Je mets ce qui suit au début de mon fichier python
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
D'après les documents: Jinja2 utilise Unicode en interne, ce qui signifie que vous devez transmettre des objets Unicode à la fonction de rendu ou à des chaînes de caractères composées uniquement de ASCII caractères.
Une chaîne normale dans Python 2.x est une chaîne d'octets. Pour la rendre unicode, utilisez:
byte_string = 'a Python string which contains non-ascii data like €äãü'
unicode_string = byte_string.decode('utf-8')
Plus: http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python