UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
我正在使用flask和谷歌应用引擎构建一个Web应用程序。此Web应用程序中的一个页面通过YouTube API进行调用,以获取给定搜索词的视频。
当我试图查询
只有当我通过jinja2模板向页面传递某个参数时,才会发生这种情况。
1 2 3 4 5 | 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文件的开头放了以下内容
1 2 3 | import sys reload(sys) sys.setdefaultencoding("utf-8") |
来自docs:jinja2在内部使用unicode,这意味着您必须将unicode对象传递给只包含ASCII字符的呈现函数或字节字符串。
python 2.x中的普通字符串是字节字符串。要使其成为Unicode,请使用:
1 2 | 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