web-dev-qa-db-fra.com

UnicodeDecodeError: le codec 'ascii' ne peut pas décoder l'octet 0xe5 en position 0: l'ordinal n'est pas dans la plage (128)

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
35
Vinay Joseph

Deviner.

Je mets ce qui suit au début de mon fichier python

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
90
Vinay Joseph

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

11
voscausa