Ответ 1
Выяснил это.
Я поставил следующее в начале моего файла python
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
Я создаю веб-приложение, используя 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
Выяснил это.
Я поставил следующее в начале моего файла python
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
Из документов: 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