1

我知道很多人已经讨论过这个话题,但由于某种原因,我无法在我的 GAE 应用程序上使用 UTF-8 编码。我正在从在线表单中检索德语字符串,然后尝试将其存储在 Stringproperty 中。代码如下所示:

import from google.appengine.ext import db
import webapp2

class Item(db.Model):
  value = db.Stringproperty()

class ItemAdd(webapp2.RequestHandler):
    def post(self):
       item - Item()
       value = str(self.request.get(u'value'))
       item.value = value.encode('utf-8')
       item.put()

我从中得到的错误是:

File "C:\xxx", line 276, in post
value = str(self.request.get('value'))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 12: ordinal not in range(128)

有人看到我做错了吗?

更新

我正在检索的字符串如下:“Dit is een länge” 如果我将属性类型更改为 TextProperty,一切正常,但是我需要能够对其进行过滤,这样就不能解决问题。

4

2 回答 2

2

Webapp2 负责处理 utf-8。在您的帖子中,webapp2 为您提供了一个 utf-8 multidict。所以你不必自己做。使用调试器,您可以在 self.request 中找到 multidict

class ItemAdd(webapp2.RequestHandler):

    def post(self):
       Item(value = self.request.POST('value')).put()

要使用 utf-8,请阅读这篇 sblog 文章,不要使用:str() !!!!!! 你的 str() 用 unicode 制作二进制 http://blog.notdot.net/2010/07/Getting-unicode-right-in-Python

使用 python27,您可以使用以下代码开始您的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
于 2013-01-30T21:20:28.737 回答
-1

当您的 python 脚本接收数据、字符串时,您必须注意文件的编码与它总是接收的相同,也许您应该将其添加到文件的顶部:

#!/usr/bin/python
# -*- coding: utf-8 -*-
于 2013-01-30T20:21:14.290 回答