UnicodeDecodeError при передаче данных GET в Python / AppEngine - PullRequest
0 голосов
/ 26 августа 2010

Это похоже на очень простой вопрос, но я не смог найти ответ.

Я хотел бы прочитать данные из URL-адреса, например, GET-данные из строки запроса. Я использую фреймворк webapp в Python. Я попробовал следующий код, но, поскольку я полностью новичок в Python / appengine, я определенно что-то сделал неправильно.

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.out.write(self.request.get('data'))

application = webapp.WSGIApplication([('/', MainPage),('/search', Search),('/next', Next)],debug=False)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

При тестировании в моей тестовой среде URL http://localhost/?data=test просто возвращает это сообщение об ошибке ниже. Без строки запроса он просто отображает пустую страницу, как и ожидалось.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in position 40: ordinal not in range(128)

Что я делаю не так и что мне делать вместо этого?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Ознакомьтесь с этим сообщением в блоге о том, как сделать Unicode прямо в Python. Короче говоря, вы пытаетесь декодировать байтовую строку (неявно) как ASCII, и она содержит байт, который недопустим в этом кодеке. Ваша строка, вероятно, в UTF-8.

2 голосов
/ 26 августа 2010

Вы пытаетесь, например, напечатать строку в кодировке ASCII, фактически содержащую данные другой кодировки.Это может произойти, например, с данными в кодировке Latin-1.Попробуйте преобразовать ваш ввод в Unicode, используя

unicoded = unicode(non_unicode_string, source_encoding)

, где source_encoding - это что-то вроде 'cp1252', 'iso-8859-1' и т. Д., И отправьте его на выход.

Посмотрите на это HOWTO .Список кодировок, поддерживаемых Python, см. В this

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