web-dev-qa-db-de.com

UnicodeDecodeError: 'ascii' Codec kann Byte 0xe5 an Position 0 nicht decodieren: Ordnungszahl nicht im Bereich (128)

Ich erstelle eine Webanwendung mit Flask und Google App Engine. Eine der Seiten in dieser Webanwendung ruft über YouTube-APIs auf, um Videos mit einem Suchbegriff zu versehen.

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, YoutubeVids.html Abzufragen.

Dies geschieht nur, wenn ich einen bestimmten Parameter über Jinja2-Vorlagen an die Seite übergebe.

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

Herausgefunden.

Ich füge Folgendes am Anfang meiner python Datei ein

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

Aus den Dokumenten: Jinja2 verwendet Unicode intern, was bedeutet, dass Sie Unicode-Objekte an die Renderfunktion übergeben müssen oder Bytestrings, die nur aus ASCII Zeichen bestehen.

Ein normaler String in Python 2.x ist ein Bytestring. Um ihn zum Unicode zu machen, verwenden Sie:

byte_string = 'a Python string which contains non-ascii data like €äãü'
unicode_string = byte_string.decode('utf-8')

Mehr: http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python

11
voscausa