web-dev-qa-db-ja.com

UnicodeDecodeError: 'ascii'コーデックは位置0のバイト0xe5をデコードできません:序数が範囲外(128)

FlaskとGoogle App Engineを使用してWebアプリケーションを構築しています。このWebアプリケーションのページの1つは、YouTube APIを介して呼び出しを行い、検索語が指定された動画を取得します。

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
35
Vinay Joseph

理解した。

pythonファイルの先頭に次を置きます

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
90
Vinay Joseph

ドキュメントから:Jinja2は内部でUnicodeを使用しているため、ASCII文字のみで構成されるレンダリング関数またはバイト文字列にUnicodeオブジェクトを渡す必要があります。

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

11
voscausa