Как обработать мою UnicodeDecodeError? - PullRequest
2 голосов
/ 19 января 2012

В моем хранилище данных содержатся значения, и я хочу, чтобы моя форма включала обновление этих значений.Я использую wtforms в jinja2 с Google App Engine.Я получаю сообщение об ошибке, которое не могу понять:

'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)
Traceback (most recent call last):
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 1077, in __call__
    return handler.dispatch()
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/handler.py", line 152, in dispatch
    response = super(NewBaseHandler, self).dispatch()
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 547, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/handler.py", line 101, in check_login
    return handler(self, *args, **kwargs)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/handler.py", line 881, in get
    self.render_jinja('details.html', **data)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/handler.py", line 119, in render_jinja
    **template_args))
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/webapp2_extras/jinja2.py", line 158, in render_template
    return self.environment.get_template(_filename).render(**context)
  File "/base/data/home/apps/s~bnano-www/wtform.356204665143172839/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "template_files/details.html", line 78, in top-level template code
    <dd> {{ form.address|safe }} </dd>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 10: ordinal not in range(128)

У меня обычный код:

class UpdateForm(Form):       
    address = TextField(_('Address'), [validators.Required()])
    zipcode = TextField(_('Zip code'), [validators.Required()])
    email = TextField(_('Email'), [validators.Required()])

class UpdateHandler(NewBaseHandler):

    @user_required
        def get(self):

        user = auth_models.User.get_by_id(long(self.auth.get_user_by_session()['user_id']))

        userinfo = self.auth.get_user_by_session()
        if user.address:
            address = user.address#.decode('utf-8')
            logging.info('user info:'+str(userinfo))

        if user:
            data = {'user': user, 'address': address, 'form':UpdateForm(obj=user)}
            self.render_jinja('details.html', **data)

    @user_required
    def post(self, sponsor=None):
        user = \
            auth_models.User.get_by_id(long(self.auth.get_user_by_session()['user_id'
                ]))
        user.address = UpdateForm(self.request.params).address.data
        user.put()
        self.render_jinja('details.html', user=user, sponsor=sponsor, form=UpdateForm(obj=user))

Интересно, что я могу сделать, чтобы решить проблему?Любая помощь очень ценится.

Обновление

Экспериментально я обнаружил, что при этом обработал ошибку: result.result_str = unicode(my_string_variable, "utf8") Я все же хотел бы избежать манипуляции со всеми строками, которые я использую.

Решено (?)

В прошлый раз, когда я проверял, проблема не возникала.Я подозреваю, что это связано с тем, что мои тестовые данные были латино-1, поэтому я очистил свои тестовые данные.Спасибо за всю помощь здесь.

Ответы [ 2 ]

6 голосов
/ 03 октября 2013

Я также использую GAE и Jinja2. И мне довелось поймать эту ошибку с помощью кириллических символов. Таким образом, эти 3 строки кода помогли мне (и я не хотел вручную «кодировать» все мои строки в коде).

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

На это указал Ричард Хуан https://stackoverflow.com/a/14919377/605952

1 голос
/ 19 января 2012

Да, это ошибка кодирования. Я вижу, вы уже пытались добавить .decode('utf-8'). Но вы пытались закодировать строку, которая вызывает ошибку, как это .encode('utf-8')?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...