2014-01-27 5 views
34

Я создаю веб-приложение, используя Flask и Google App Engine. Одна из страниц этого веб-приложения делает звонок через API YouTube для получения видеороликов с учетом поискового запроса.UnicodeDecodeError: кодек ascii не может декодировать байт 0xe5 в позиции 0: порядковый номер не в диапазоне (128)

При попытке запросить 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 

ответ

84

Фигурного его.

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

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

Или вы можете использовать: из __future__ импортируйте unicode_literals в начале. – voscausa

+0

Нет ... не ... зачем ты это делаешь? –

+0

@ Matt Nordhoff: Почему бы и нет? Я делаю это навсегда (и приведенное выше дает ошибку). – orome

10

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

Обычная строка в Python 2.x - это байтовая строка. Для того, чтобы сделать его Юникод использования:

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

+2

Кроме того, [Прагматичный Unicode] (http://nedbatchelder.com/text/unipain.html) Нед Батчелдер, [Docs Unicode КОЛБЫ в ] (http://flask.pocoo.org/docs/dev/unicode/) и [Jinja's Unicode docs] (http://jinja.pocoo.org/docs/dev/api/#unicode). –

Смежные вопросы

 Смежные вопросы