Foo(bar = self.request.POST['bar'])BadValueError: Property bar must be a str or unicode instance, not a tupleFoo(bar = self.request.POST.get('bar'))BadValueError: Property bar must be a str or unicode instance, not a tupleFoo(bar = unicode(self.request.POST.get('bar')))UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 44: ordinal not in range(128)
This is very weird. Both POST['bar'] and POST.get('bar') should work.
Can you post a full example?
foo.bar=self.request.POST.get('bar'),
#!/usr/bin/env python# encoding: utf-8from google.appengine.ext import dbimport webapp2class Foo(db.Model):bar = db.StringProperty()class HomeHandler(webapp2.RequestHandler):def get(self):self.response.out.write('<html><body><form action="/post" method="post" accept-charset="utf-8"><p>')self.response.out.write('<input type="text" name="bar" value="á"><input type="submit" value="submit">')self.response.out.write('</p></form></body></html>')class PostHandler(webapp2.RequestHandler):def post(self):bar=self.request.POST['bar']if bar:bar = bar[:500]foo = Foo(bar=bar)foo.put()app = webapp2.WSGIApplication([webapp2.Route('/', HomeHandler),webapp2.Route('/post', PostHandler),], debug=True)def main():app.run()if __name__ == '__main__':main()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
Sent from my iPad
def get_posted_field(self, field, maxlength=FIELD_MAX_LENGTH):field = self.request.POST.get(field)if field:field = field.decode('utf-8')if len(field) > maxlength:field = field[:maxlength]return field
Thank you very much. I am very grateful for that!
Gabor
self.response.set_cookie('foo', urllib.quote(u'á').encode('utf-8'))...foo = urllib.unquote(self.request.cookies.get('foo')).decode('utf-8')
self.response.set_cookie('foo', urllib.quote(u'á'.encode('utf-8')))
...foo = urllib.unquote(self.request.cookies.get('foo')).decode('utf-8')
After a chat with WebOb maintainer, we have 2 solutions. It is
actually easier than we thought.