GAE Python:无法弄清楚如何在Stringproperty中存储UTF-8

时间:2013-01-30 20:01:43

标签: python google-app-engine encoding utf-8

我知道许多人已经解决了这个问题,但由于某种原因,我无法使用UTF-8编码来处理我的GAE应用程序。我正在从在线表单中检索德语字符串,然后尝试将其存储在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 iseenlänge” 如果我将属性类型更改为TextProperty一切正常,但我需要能够对其进行过滤,因此这不能解决问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

当你的python脚本接收数据,字符串时,你必须要小心文件的编码与它总是接收的相同,也许你应该把它添加到文件的顶部:

#!/usr/bin/python
# -*- coding: utf-8 -*-