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

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

Я создаю веб-приложение, используя Flask и Google App Engine. Одна из страниц этого веб-приложения делает звонок через API YouTube для получения видеороликов с учетом поискового запроса.

При попытке запросить YoutubeVids.html я получаю следующую ошибку.

Это происходит только тогда, когда я передаю определенный параметр с помощью шаблонов 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
4b9b3361

Ответ 1

Выяснил это.

Я поставил следующее в начале моего файла python

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

Ответ 2

Из документов: Jinja2 использует Unicode внутри, что означает, что вам нужно передать объекты Unicode функции визуализации или байты, которые состоят только из символов ASCII.

Нормальная строка в Python 2.x - это байтовая строка. Чтобы сделать его unicode, используйте:

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

Подробнее: http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python