【问题标题】:UnicodeDecodeError when passing GET data in Python/AppEngine在 Python/AppEngine 中传递 GET 数据时出现 UnicodeDecodeError
【发布时间】:2010-08-25 21:38:09
【问题描述】:

这感觉像是一个非常基本的问题,但我一直无法找到答案。

我想从 url 读取数据,例如从查询字符串获取数据。我在 Python 中使用webapp 框架。我尝试了以下代码,但由于我是 Python/appengine 的初学者,我肯定做错了什么。

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write(self.request.get('data'))

application = webapp.WSGIApplication([('/', MainPage),('/search', Search),('/next', Next)],debug=False)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

在我的测试环境中进行测试时,URL http://localhost/?data=test 只是在下面返回此错误消息。如果没有查询字符串,它只会按预期显示一个空白页面。

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

我做错了什么,我应该怎么做?

【问题讨论】:

  • 您的代码对我来说看起来不错。错误来自哪里?你能包括其余的堆栈跟踪吗?
  • 抱歉,真正的问题似乎不是获取 GET 数据的代码,而是其他问题。我将编辑我的问题。

标签: python google-app-engine web-applications


【解决方案1】:

你尝试例如打印一个实际包含不同字符集数据的 ASCII 编码字符串。这可能发生,例如使用 Latin-1 编码的数据。尝试使用

将您的输入转换为 unicode
unicoded = unicode(non_unicode_string, source_encoding)

其中source_encoding 类似于'cp1252''iso-8859-1' 等,并将其发送到输出。

看看this HOWTO。有关 Python 支持的编码列表,请参阅this

【讨论】:

  • 谢谢!尝试从 urlfetch 查询写入结果时发生此错误。我无法理解的想法是,为什么当我尝试将查询字符串传递给它时才发生错误,而不是当我没有时?
【解决方案2】:

查看this blog post,了解如何在 Python 中正确执行 unicode。简而言之,您正在尝试将字节字符串(隐式)解码为 ASCII,并且它包含在该编解码器中无效的字节。您的字符串可能是 UTF-8 格式。

【讨论】:

  • 一个 Unicode 字符串 [snip] 包含一个不能表示为 unicode 的字符??????
  • -1 如果 OP 试图将 Unicode 字符串编码为 ASCII,但它不“适合”,他会得到一个 Unicode En codeError -- OP报告 Unicode De codeError.
  • @John 你是对的 - 已修复。不过,为一个简单的错字投反对票似乎有点没有根据。
  • (1) -1 用于阅读问题bassackwards:“encode”而不是“decode”(2)“unicode”而不是“ascii”是一个简单的错字??
  • @John 现在已修复 - 所以请随意删除您的反对票。除非您认为更新后的答案仍然不准确?
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多