У меня есть форма в web.py, которая отлично отображается благодаря string.decode ('utf-8'), но когда она отправляется, я получаю 'ascii' codec can't encode character u'\xf6' in position 1: ordinal not in range(128)
from web/form.py in attrget, строка 17.web.py Ошибка формы.validates() с символом utf-8 в имени атрибута
Этот код выглядит так, строка 17 - это, в частности, проход в исключающем блоке.
def attrget(obj, attr, value=None):
try:
if hasattr(obj, 'has_key') and obj.has_key(attr):
return obj[attr]
except TypeError:
# Handle the case where has_key takes different number of arguments.
# This is the case with Model objects on appengine. See #134
pass
if hasattr(obj, attr):
return getattr(obj, attr)
return value
Это должно быть что-то о кодировании, потому что форма работает, если я удаляю шведский символ ö. Вот определение формы.
searchForm = form.Form(
form.Textbox('Startdatum', id='datepickerStart'),
form.Textbox('Slutdatum', id='datepickerEnd'),
form.Textbox('IPadress', validIPaddress),
form.Textbox('Macadress', validMacaddress),
form.Button('Sök'.decode('utf-8'), type='submit', description='Search')
)
Третья строка, вызывающая Form.validates(), находится там, где она запускается.
def POST(self):
form = self.searchForm()
if not form.validates():
headerMsg = 'Du skrev något fel, gör om, gör rätt.'.decode('utf-8')
return tpl.index(headerMsg, form)
return tpl.index(headerMsg='Inga rader hittades', form=form)
Полный след выглядит следующим образом.
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/application.py", line 239, in process
return self.handle()
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/application.py", line 230, in handle
return self._delegate(fn, self.fvars, args)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/application.py", line 420, in _delegate
return handle_class(cls)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/application.py", line 396, in handle_class
return tocall(*args)
File "/home/mkbnetadm/netadmin/na.py", line 36, in POST
if not form.validates():
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/form.py", line 76, in validates
v = attrget(source, i.name)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.37-py2.6.egg/web/form.py", line 18, in attrget
if hasattr(obj, attr):
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 1: ordinal not in range(128)
Так что я могу сделать, чтобы избежать этой ошибки при создании форм в web.py?
Я не понимаю, все это использование ' 'Sök'.decode (' UTF- 8') '. Почему бы не использовать Unicode в первую очередь: 'u'Sök''? –
, который является строкой 17? –
@ DanielRoseman Использование uString также работает, но не решает проблему. –