UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xe5:序数不在范围内(128)
Posted
技术标签:
【中文标题】UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xe5:序数不在范围内(128)【英文标题】:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128) 【发布时间】:2014-02-19 01:16:14 【问题描述】:我正在使用 Flask 和 Google App Engine 构建一个网络应用程序。此 Web 应用程序中的一个页面通过 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
【问题讨论】:
【参考方案1】:想通了。
我将以下内容放在我的 python 文件的开头
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
【讨论】:
或者你可以使用:from future import unicode_literals at the start. 不……不要……你为什么要那样做? @Matt Nordhoff:为什么不呢?我一直在这样做(上面给出了一个错误)。 @raxacoricofallapatorius:见Dangers of sys.setdefaultencoding('utf-8') @idbrii:是的。似乎没有办法取胜(也许 Python 3 除外?)!【参考方案2】:来自文档:Jinja2 在内部使用 Unicode,这意味着您必须将 Unicode 对象传递给渲染函数或仅由 ASCII 字符组成的字节串。
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
【讨论】:
另外,Pragmatic Unicode by Ned Batchelder、Flask's Unicode docs 和 Jinja's Unicode docs。以上是关于UnicodeDecodeError:“ascii”编解码器无法解码位置 0 的字节 0xe5:序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章
UnicodeDecodeError: 'ascii' 编解码器无法在位置解码字节 0xec
Python/Flask:UnicodeDecodeError/UnicodeEncodeError:“ascii”编解码器无法解码/编码
UnicodeDecodeError:“ascii”编解码器无法解码位置 1 的字节 0xef
如何避免 Redshift Python UDF 出现 UnicodeDecodeError ascii 错误?
python2 当中 遇到 UnicodeDecodeError UnicodeDecodeError: 'ascii' codec can't decode byte 0xe
UnicodeDecodeError:'ascii'编解码器无法解码位置 284 中的字节 0x93:序数不在范围内(128)[重复]