I am building a web application using Flask and Google App Engine. One of the pages in this web application makes a call via YouTube APIs to get videos given a search term.
I get the following error when I try to query YoutubeVids.html
.
This only happens when when I pass a certain parameter via Jinja2 templates to the page.
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
The UnicodeDecodeError normally happens when decoding an str string from a certain coding. Since codings map only a limited number of str strings to unicode characters, an illegal sequence of str characters will cause the coding-specific decode() to fail.
Figured it out.
I put the following at the start of my python file
import sys reload(sys) sys.setdefaultencoding("utf-8")
From the docs: Jinja2 is using Unicode internally which means that you have to pass Unicode objects to the render function or bytestrings that only consist of ASCII characters.
A normal string in Python 2.x is a bytestring. To make it unicode use:
byte_string = 'a Python string which contains non-ascii data like €äãü' unicode_string = byte_string.decode('utf-8')
More: http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With