Google App Engine:UnicodeDecodeError:“ascii”编解码器无法解码位置 48 中的字节 0xe2:序数不在范围内(128)

Posted

技术标签:

【中文标题】Google App Engine:UnicodeDecodeError:“ascii”编解码器无法解码位置 48 中的字节 0xe2:序数不在范围内(128)【英文标题】:Google App Engine: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 48: ordinal not in range(128) 【发布时间】:2014-01-21 07:37:23 【问题描述】:

我正在使用 Google App Engine 开发一个使用 Quora RSS 提要的小型应用程序。有一个表单,它会根据用户输入的输入,输出与输入相关的链接列表。现在,如果单词用“-”分隔,应用程序可以很好地处理一个字母查询和大多数两字母单词。但是,对于三个字母的单词和一些两个字母的单词,我收到以下错误:

UnicodeDecodeError:“ascii”编解码器无法解码位置 48 中的字节 0xe2:序数不在范围内 (128)

这是我的 Python 代码:

import os
import webapp2
import jinja2
from google.appengine.ext import db
import urllib2
import re

template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)

class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)
    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)
    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

class MainPage(Handler):
    def get(self):
        self.render("formrss.html")
    def post(self):
        x = self.request.get("rssquery")
        url = "http://www.quora.com/" + x + "/rss"
        content = urllib2.urlopen(url).read()
        allTitles =  re.compile('<title>(.*?)</title>')
        allLinks = re.compile('<link>(.*?)</link>')
        list = re.findall(allTitles,content)
        linklist = re.findall(allLinks,content)
        self.render("frontrss.html", list = list, linklist = linklist)



app = webapp2.WSGIApplication([('/', MainPage)], debug=True)

这是html代码:

<h1>Quora Live Feed</h1><br><br><br>

% extends "rssbase.html" %

% block content %
    % for e in range(1, 19) %
         (list[e])  <br>
        <a href=" linklist[e] "> linklist[e] </a>
        <br><br>
    % endfor %
% endblock %

【问题讨论】:

你能给我们完整的回溯吗?只是异常并没有告诉我们异常是在哪里引发的或 Python 是如何到达该位置的。 这个错误非常可怕,有时会在 python 中发生,这真的很令人困惑,我知道我并不是唯一一个遇到它的人。而且我多次使用它,答案甚至并不总是很清楚是编码还是解码。这个错误永远不会在 Java 中发生,例如“一切都是 unicode”,那么当 Java 从来没有这个问题时,为什么 Python 会向我们强加这种混乱的根源呢?我在 Google App Engine 上多次编写国际化网络应用程序时遇到此错误,即使它正在工作时也不清楚该做什么。 【参考方案1】:

Python很可能尝试使用 ascii 编解码器将 unicode 字符串解码为普通 str,但失败了。当您使用 unicode 数据时,您需要对其进行解码:

content = content.decode('utf-8')

【讨论】:

【参考方案2】:

在我的 AppEngine 应用程序中,我将其转换为:

content = unicode(content)

我觉得它更清晰易用。

【讨论】:

以上是关于Google App Engine:UnicodeDecodeError:“ascii”编解码器无法解码位置 48 中的字节 0xe2:序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章

连接 Google App Engine 和 Google Compute Engine

Google App Engine Flexible 和 Google Container Engine 之间的区别?

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?

将 Meteor 部署到 Google App Engine 2017

Google BigQuery 的 Google App Engine 授权

Google App Engine 通过内部网络与 Compute Engine 通信