关于api:unicodedecodeerror:’ascii’编解码器无法在位置0解码字节0xe5:序号不在范围(128)内’ascii’ codec can’t decode byte 0xe5 in position 0: ordinal not in range(128)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

我正在使用flask和谷歌应用引擎构建一个Web应用程序。此Web应用程序中的一个页面通过YouTube API进行调用,以获取给定搜索词的视频。

当我试图查询YoutubeVids.html时,得到以下错误。

只有当我通过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